【问题标题】:Searchview in android Toolbarandroid工具栏中的搜索视图
【发布时间】:2017-08-16 00:57:33
【问题描述】:

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

@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 文件。
  • 你能附上你的logcat吗?
  • schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto">
  • id 在 xml 中是错误的,它是 action_search 并且你使用 search 作为 id。
  • 更改为 searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

标签: android android-actionbar android-toolbar searchview


【解决方案1】:

尝试更改此行:

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

【讨论】:

  • 更改为 searchView.setSearchableInfo(searchManager.getSearchableInfo‌​(getComponentName())‌​);
  • 请添加您的日志猫
  • 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) 在 android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:362) 在 android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java
  • 请您的 MainActivity 201 没有行添加
  • 这是第 201 行:SearchView searchView =(SearchView) menu.findItem(R.id.search).getActionView();
【解决方案2】:

在菜单中设置 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" />

【讨论】:

【解决方案3】:

你错过了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>

【讨论】:

    【解决方案4】:

    您忘记在 menu.xml 中添加 actionViewClass

    将这些线路添加给您menu.xml

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

    在你的 Java 代码中找到 SearchView 使用 -

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

    参考 - MenuItemCompat

    【讨论】:

      【解决方案5】:

      尝试使用这个

      @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"/>
      

      【讨论】:

      • 请给我一个链接,我可以在其中找到如何在工具栏中实现搜索视图的示例..
      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多