developer tip

조각에서 툴바를 얻는 방법?

optionbox 2020. 8. 21. 07:32
반응형

조각에서 툴바를 얻는 방법?


나는이 ActionBarActivity함께 NavigationDrawer하고 사용 support_v7 Toolbar액션 바있다. 내 조각 도구 모음 중 하나에 사용자 정의보기가 있습니다. 다른 조각 Toolbar에서는 제목이 표시되어야합니다.

Toolbar프래그먼트에서 커스터마이징을위한 인스턴스를 어떻게 얻 습니까? 으로 ActionBar를 얻을 수 getActivity().getActionBar()있지만 setTitle()이 인스턴스 ActionBar를 호출 하면 아무 작업도 수행하지 않습니다.

UPD :

나의 경우에는

((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();

(MrEngineer13이 말했듯이) onHiddenChanged ()에서 호출하기 때문에 처음 조각 생성시 작동하지 않습니다. 이제 onCreateView ()에 하나를 더 추가하면 제대로 작동합니다.


활동을 getActivity()에서 AppCompatActivity처음 으로 캐스팅해야합니다 . 예를 들면 다음과 같습니다.

((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();

캐스팅 해야하는 이유 getActivity()는 a를 반환 FragmentActivity하고AppCompatActivity


조각에 ToolBar의 사용자 지정보기가 있어야하는 경우 각 조각에 대해 ToolBar를 개별적으로 구현할 수 있습니다.

fragment_layout에 ToolBar를 추가합니다.

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimaryDark"/>

조각에서 찾으십시오.

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container, false);
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);

        //set toolbar appearance
        toolbar.setBackground(R.color.material_blue_grey_800);

        //for crate home button
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

메뉴 리스너는 두 가지 방법으로 만들 수 있습니다. 조각에서 onOptionsItemSelected를 재정의합니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case android.R.id.home:
            getActivity().onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}

또는 onCreateView ()에서 도구 모음을 만들 때 리스너를 설정합니다.

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                return false;
            }
        });

도구 모음을 조각으로 만들려면 두 가지 선택이 있습니다.

첫 번째

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

그리고 두 번째

Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;

toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);

Kotlin 사용자의 경우 (activity as AppCompatActivity).supportActionBar?.show()


getActivity().getSupportActionBar().setTitle()support_v7을 사용하는 경우 시도 해야 할 수도 있습니다 .


조각에서 : ( 조각 에서 툴바를 가져 오시겠습니까?)

// get toolbar
((MainAcivity)this.getActivity()).getToolbar();  // getToolbar will be method in Activity that returns Toolbar!!  don't use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();

이것은 툴바에서 스피너를 사용 하고 조각에서 툴바 스피너 또는 사용자 정의 호출 할 때 매우 유용합니다 !

활동에서 :

// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();

Activity 클래스에서 이에 대한 메서드를 만들 수 있습니다.

public void setToolbarTitle(String title) {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(title);
}

그리고 다음과 같이 사용할 수 있습니다.

setToolbarTitle("Hello World");

이 단계를 사용하여 수행했습니다.

  1. Set Title using below code in onCreateView of the main fragment.
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your title");

  1. For swapping between fragments i'm using bottom navigation bar which is implemented on MainActivity (Parent Activity) of the fragment. Even if you are using any button or menu item then you can change the title from onSelectedItemClickListener, just like i did in my case.
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.menu_dashboard:
                getSupportActionBar().setTitle("Dashboard");
                fm.beginTransaction().hide(active).show(dashboardFragment).commit();
                active = dashboardFragment;
                return true;
            case R.id.menu_workshop:
                getSupportActionBar().setTitle("Workshops");
                fm.beginTransaction().hide(active).show(workshopFragment).commit();
                active = workshopFragment;
                return true;
         }
         return false;
    }
    

참고URL : https://stackoverflow.com/questions/26998455/how-to-get-toolbar-from-fragment

반응형