搜索图标在Fragment的工具栏中显示两次

时间:2015-06-15 15:39:19

标签: android android-fragments android-toolbar

我正在尝试在我的应用程序中实现搜索功能。 我试图在工具栏中显示搜索图标,但不是单个搜索图标,而是显示多个图标。从menu.xml文件中显示一个图标,并从行setHasOptionsMenu(true);显示其他图标。

如果我不使用“setHasOptionsMenu(true)”行,则onOptionsItemSelectedMenu方法将不会被调用,如果我不在menu.xml文件中提供搜索图标,则搜索图标将不会显示。请让我知道如何摆脱这个问题。我努力没有果实。请帮我解决这个问题。

我当前的工具栏如下图所示:

ToolBar

我的menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.blo.ifo.ifocusblogs.ActivityForFragments">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />

    <item android:id="@+id/search"
        android:title="@string/search_label"
        android:icon="@mipmap/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题 my problem

这是我发现的解决方案: 添加&#34; menu.clear();&#34;到&#34; onPrepareOptionsMenu&#34;在MainActivity中 solution

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    menu.clear();
    getMenuInflater().inflate(R.menu.main,menu);
    MenuItem itemSearch = menu.findItem(R.id.action_search);
    mSearchView = (SearchView) itemSearch.getActionView();

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setQueryHint(getResources().getString(R.string.searchProduct));

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

        @Override
        public boolean onQueryTextChange(String newText) {
            if (TextUtils.isEmpty(newText)){
                adapter.getFilter().filter("");
                listview.clearTextFilter();
            }else {
                adapter.getFilter().filter(newText.toString());
            }
            return true;
        }
    });
    return true;
}