Java 搜索图标操作按钮未显示在操作栏中-无法访问搜索功能

Java 搜索图标操作按钮未显示在操作栏中-无法访问搜索功能,java,android,xml,search,Java,Android,Xml,Search,我已使用以下内容为RecyclerView创建了一个搜索功能: 如何使用SearchView筛选RecyclerView 我无法测试它,因为所有显示的都是带有应用程序标题的应用程序栏。我期待(希望!)看到一个搜索图标操作按钮,我点击它打开一个搜索字段。(与附件中的演示类似) 我有以下代码适用于启动搜索菜单: search_menu.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://sch

我已使用以下内容为RecyclerView创建了一个搜索功能:

如何使用SearchView筛选RecyclerView

我无法测试它,因为所有显示的都是带有应用程序标题的应用程序栏。我期待(希望!)看到一个搜索图标操作按钮,我点击它打开一个搜索字段。(与附件中的演示类似)

我有以下代码适用于启动搜索菜单:

search_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@android:drawable/ic_menu_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:showAsAction="always|ifroom"
/>
</menu>
}


我已经阅读了android开发者指南,但仍然无法理解。有人能告诉我是否遗漏了什么吗?或者你知道为什么它不显示吗?我完全被难住了

不要覆盖与菜单相关的任何方法,如
onMenuCreated
onMenuItemSelected

将此代码添加到MainActivity XML中

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

            <android.support.v7.widget.SearchView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/search"/>
        </android.support.v7.widget.Toolbar>


    </android.support.design.widget.AppBarLayout>

然后在片段中,访问搜索视图,就像使用ID访问其他视图一样


您正在尝试将搜索图标强制转换为搜索视图,创建自定义布局,然后它就会工作。

不要覆盖任何与菜单相关的方法,如
onMenuCreated
onMenuItemSelected

将此代码添加到MainActivity XML中

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

            <android.support.v7.widget.SearchView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/search"/>
        </android.support.v7.widget.Toolbar>


    </android.support.design.widget.AppBarLayout>

然后在片段中,访问搜索视图,就像使用ID访问其他视图一样



您正在尝试将搜索图标强制转换为搜索视图,创建自定义布局,然后它就会工作。

这是来自活动还是片段?它来自片段!您是否在
onCreateView()中的某个地方调用了
sethasOptions菜单(true)
?啊,不,我没有!但我只是尝试了一下,它抛出了一个空指针异常:(java.lang.NullPointerException:尝试调用虚拟方法'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)'在空对象引用上,您试图将
搜索图标
强制转换为
搜索视图
您需要直接在工具栏中进行更改。这是来自活动还是片段?它来自片段!您是否在
onCreateView()中的某个位置调用了
设置选项菜单(true)
?啊,不,我没有!但我只是尝试了一下,它抛出了一个空指针异常:(java.lang.NullPointerException:尝试调用虚拟方法'void android.support.v7.widget.SearchView.setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener)'在空对象引用上,您试图将
搜索图标
转换为
搜索视图
您需要直接在工具栏中进行更改。谢谢@MohammedAtif-我真的很感谢您的帮助。我不确定我是否完全理解。我已将我的代码修改为上面的代码,但不知道是否仍需要调用setOnQueryTextListener()在某个地方?同样,上面的xml会去哪里?这会影响我在onCreateOptions菜单()中调用的内容吗methid?很抱歉这个非结构化的答案。如果你使用的是SearchView,那么你就不会覆盖前两个方法,你可以像OnActivityCreated或OnCreateView中的其他视图一样直接访问它。XML将成为你的MainActivity XML的一部分,谢谢@Mohammed的帮助。我想我越来越接近了!我没有上面两个方法,但我仍然可以重写OnCreateOptions菜单()?我已将上述内容放在我的主活动中,但在尝试访问搜索视图时,我没有视图对象,即SearchView SearchView=(SearchView)View\u one.findViewById(R.id.SearchView\u main);该视图来自何处?感谢您在创建自定义工具栏时如此耐心,您不会覆盖
onCreateOptions菜单()
,仅供您理解,在android studio中,创建新的NavigationDrawerActivity项目,并检查活动的主布局。然后根据您的便利性混合和匹配代码。谢谢@MohammedAtif-我真的很感谢您的帮助。我不确定我是否完全理解。我将我的代码修改为您的上述代码,但不知道我是否仍然需要要在某个地方调用setOnQueryTextListener()?同样,上面的xml会去哪里?这会影响我在onCreateOptions菜单()中调用的内容吗methid?很抱歉这个非结构化的答案。如果你使用的是SearchView,那么你就不会覆盖前两个方法,你可以像OnActivityCreated或OnCreateView中的其他视图一样直接访问它。XML将成为你的MainActivity XML的一部分,谢谢@Mohammed的帮助。我想我越来越接近了!我没有上面两个方法,但我仍然可以重写OnCreateOptions菜单()?我已将上述内容放在我的主活动中,但在尝试访问搜索视图时,我没有视图对象,即SearchView SearchView=(SearchView)View\u one.findViewById(R.id.SearchView\u main);该视图来自何处?感谢您在创建自定义工具栏时如此耐心,您不会覆盖
onCreateOptions菜单()
,仅供您理解,在android studio中,创建新的NavigationDrawerActivity项目,并检查活动主布局。然后根据您的便利性混合和匹配代码。