在Android工具栏中使用SearchView

3

我正尝试在 Android 应用程序的工具栏中构建一个搜索视图,但在 onCreateoptionsMenu 方法的第三行中得到了空指针异常。任何帮助将不胜感激,先谢谢了。

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    SearchManager searchManager =(SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =(SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    return true;

}

以下是我的menu.xml文件内容 -
<item
    android:icon="@drawable/ic_search"
    android:id="@+id/action_search"
    android:orderInCategory="200"
    android:title="Search"
    app:showAsAction="ifRoom" />


请上传 R.menu.main 文件。 - 9spl
你能附上你的logcat吗? - A P
<?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/action_search" android:orderInCategory="200" android:title="Search" android:icon="@drawable/ic_search" app:showAsAction="ifRoom" /> </menu> - user6602355
XML中的id是错误的,它应该是action_search,而您正在使用search作为id。 - 9spl
在将searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));更改后,出现了空指针异常。 - user6602355
5个回答

0

尝试更改这一行:

SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

在将searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));更改后,出现了空指针异常。 - user6602355
please add your logcat - Ratilal Chopda
E/AndroidRuntime: 致命异常:主要进程 进程:worklist.com.worklist,PID:3720 java.lang.NullPointerException at worklist.com.worklist.MainActivity.onCreateOptionsMenu(MainActivity.java:201) at android.app.Activity.onCreatePanelMenu(Activity.java:2698) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:362)at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java - user6602355
请在您的MainActivity中添加第201行。 - Ratilal Chopda
这是第201行:SearchView searchView =(SearchView)menu.findItem(R.id.search).getActionView(); - user6602355
添加你的MainActivity。 - Ratilal Chopda

0
在菜单中设置SearchView类。
   <item
        android:icon="@drawable/ic_search"
        android:id="@+id/action_search"
        android:orderInCategory="200"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom" />

我在菜单文件夹中有options_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="@drawable/ic_search" app:showAsAction="ifRoom" android:actionViewClass="android.widget.SearchView" /> </menu> - user6602355

0

你错过了 app:actionViewClass="android.support.v7.widget.SearchView" 属性。 并且你需要导入 android.support.v7.widget.SearchView;

 <?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/action_search"
            android:icon="@drawable/search"
            android:title="@string/Search"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="always|collapseActionView" />
    </menu>

0

You forgot to add actionViewClass in menu.xml

Add these line to you menu.xml

...
app:showAsAction="always|collapseActionView"
android:actionViewClass="android.support.v7.widget.SearchView" />

While in your Java code find SearchView using -

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

Reference - MenuItemCompat


0

尝试使用这个

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    // Inflate menu to add items to action bar if it is present.
    inflater.inflate(R.menu.menu_main, menu);
    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =
            (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    return true;
}


<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:appcompat="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/tools">

<item
    android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never"/>

<item
    android:id="@+id/menu_search"
    android:title="@string/menu_search"
    appcompat:actionViewClass="android.support.v7.widget.SearchView"
    appcompat:showAsAction="always"/>


请问您能否提供一个链接,让我可以找到如何在工具栏中实现搜索视图的示例? - user6602355

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接