Android SearchView未在不同的片段中隐藏工具栏

Android SearchView未在不同的片段中隐藏工具栏,android,android-fragments,android-toolbar,android-menu,Android,Android Fragments,Android Toolbar,Android Menu,我在Tablayout的Fragment中的一个内部实现了SearchView。在tablayout片段之间切换时,它工作正常(显示/隐藏) 我的问题是我有一个家庭活动,我在其中一个片段中实现了导航抽屉,我添加了表格布局,在其中一个表格布局片段中添加了搜索视图。当我从具有SearchView的Fragment切换到NavDrawer的Fragment时,会出现问题。 Searchview也保留在其他片段中,当我切换回添加Searchview的片段时,该片段会在工具栏上再添加一个Searchvie

我在
Tablayout
Fragment
中的一个内部实现了
SearchView
。在tablayout片段之间切换时,它工作正常(显示/隐藏)

我的问题是我有一个
家庭活动
,我在其中一个
片段中实现了
导航抽屉
,我添加了
表格布局
,在其中一个
表格布局片段中添加了
搜索视图
。当我从具有
SearchView
Fragment
切换到NavDrawer的
Fragment
时,会出现问题。 Searchview也保留在其他片段中,当我切换回添加Searchview的片段时,该片段会在
工具栏上再添加一个Searchview

这是我的代码片段,作为
SearchView

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        setHasOptionsMenu(true);
        ....
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_search, menu);
        LogUtils.LOGI("menu added", "menu");
        // Associate searchable configuration with the SearchView
        //SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        //SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        //searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        final MenuItem item = menu.findItem(R.id.search);
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                LogUtils.LOGI("Search filter", query);
                final ArrayList<EventModel> filteredModelList = filter(allEventseventsArrayList, query);
                allEventsListAdapter.animateTo(filteredModelList);
                eventbriteListRecyclerView.scrollToPosition(0);
                return true;
            }
        });


        searchView.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LogUtils.LOGI("Search", "Search Expands");
                titleIconImageView.setVisibility(View.GONE);
            }
        });

        searchView.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                LogUtils.LOGI("Search", "Search Collapse");
                titleIconImageView.setVisibility(View.VISIBLE);
                return false;
            }
        });

        MenuItemCompat.setOnActionExpandListener(item,
                new MenuItemCompat.OnActionExpandListener() {
                    @Override
                    public boolean onMenuItemActionExpand(MenuItem menuItem) {
                        // Return true to allow the action view to expand
                        titleIconImageView.setVisibility(View.GONE);
                        LogUtils.LOGI("Menu", "Menu Expands");
                        return true;
                    }

                    @Override
                    public boolean onMenuItemActionCollapse(MenuItem menuItem) {
                        // When the action view is collapsed, reset the query
                        LogUtils.LOGI("Menu", "Menu Collapse");
                        titleIconImageView.setVisibility(View.VISIBLE);
                        // Return true to allow the action view to collapse
                        return true;
                    }
                });

        super.onCreateOptionsMenu(menu, inflater);
    }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        setHasOptionsMenu(false);
        ....
}
我没有在活动中添加任何与菜单相关的代码

使用searchView首次运行图像

从导航菜单切换到不同片段后的图像

图像再次切换到具有菜单的片段

这有点老套,但我通过将SetHasOptions菜单设置为true并通过清除OnCreateOptions菜单中的菜单,解决了这个问题

public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
   menu.clear()
}