AndroidのFragmentでActivityのToolbarを利用する

Oct 16, 2016   #Android  #dev  #memo 

Activityは1つでFragmentは複数あり、1つのActivityの中でView切替をしてます。

その中で、あるFragmentでは検索バーを出したいなと思いToolbarを呼び出してみたのですが、inflateMenuした後にFragment切替をするとそのままMenuが残ってしまい。

Fragmentを切り替えたときは検索バーを消したいなと思い下記の対応で消してみました。

  • FragmentのonCreateView内で検索バーを追加
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_memo_list, container, false);

    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
    toolbar.inflateMenu(R.menu.search);

    SearchView searchView = (SearchView) toolbar.getMenu().findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

    return view;
}

getActivity().findViewByIdでActivityのViewからToolbarのインスタンスを取得し追加

  • FragmentのonDestroyView内で検索バーをクリアする
@Override
public void onDestroyView() {
    Toolbar toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar);
    toolbar.getMenu().clear();

    super.onDestroyView();
}