android - SearchView 没有隐藏在不同 fragment 中的工具栏中

标签 android android-fragments android-toolbar android-menu

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

我的问题是我有一个 HomeActivity,我在其中一个 Fragment 中实现了 NavigationDrawer 我添加了 TabLayout 并在其中一个 TabLayout Fragment 中添加了 SearchView。当我从具有 SearchViewFragment 切换到来自 NavDrawer 的 Fragment 时,会出现问题。 Searchview 也保留在其他 fragment 中,当我切换回我添加了 searchView 的 fragment 时,该 fragment 会在 Toolbar 上再添加一个 searchview。

这是我的 Fragment 代码,作为 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);
    }

Fragment 代码,我不想要 SearchView

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

我没有在 Activity 中添加任何与菜单相关的代码。

首先用searchView运行Image enter image description here

从 navMenu 切换到不同 fragment 后的图像 enter image description here

图像再次切换到具有菜单的 fragment enter image description here

最佳答案

这有点老套,但我通过将 setHasOptionsMenu 设置为 true 并通过

清除 onCreateOptionsMenu 中的菜单来解决它
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
   menu.clear()
}

关于android - SearchView 没有隐藏在不同 fragment 中的工具栏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151212/

相关文章:

java - 如何在 firebase 中查询?

android - 如何通过 ContentResolver 调用 ContentProvider 中的自定义方法,然后访问 Bundle?

android - 在 fragment 的布局中制作一列按钮

android - ViewPager 终止后 fragment 布局不显示

android - 操作栏、工具栏、 Activity 继承

java - 在 Java 中将字符串连接到 "sets"

android - 无法从 Firebase 数据库检索数据

java - 如何展示测验结果?

android - Android中如何用自定义的action bar完全替换AppCompatActivity的action bar?

java - 菜单项未显示在工具栏 SDK 29 中