【问题标题】:Nullpointerexception when trying to add SearchView to my appcompat activity尝试将 SearchView 添加到我的 appcompat 活动时出现 Nullpointerexception
【发布时间】:2018-06-03 12:43:41
【问题描述】:

我在尝试将 SearchView 添加到我的 appcompat 活动时遇到 Nullpointerexception。我已经通过 this answer 但无法解决它。

这是我的

menu_main.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">

        <item android:id="@+id/action_search"
            android:icon="@android:drawable/ic_menu_search"
            android:title="Search"
              android:iconifiedByDefault="false"
            app:showAsAction="always"
            app:actionViewClass="android.support.v7.widget.SearchView"/>

onCreateOptionsMenu

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.menu_main, menu);

    mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
    mSearchView.setIconifiedByDefault(true);

我也试过了:

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

低于异常:

java.lang.NullPointerException:尝试调用虚拟方法 '空白 android.support.v7.widget.SearchView.setIconifiedByDefault(boolean)' 在空对象引用上

【问题讨论】:

  • 你也编辑你的 manifest.xml 吗?
  • @ParaskevasNtsounos 我添加了&lt;intent-filter&gt; &lt;action android:name="android.intent.action.SEARCH" /&gt; &lt;/intent-filter&gt;
  • @ParaskevasNtsounos 已经检查过..我只使用了 app:actionViewClass
  • 检查我的答案

标签: android nullpointerexception android-actionbar searchview appcompatactivity


【解决方案1】:

试试这个代码:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            getMenuInflater().inflate(R.menu.menu_main, menu);

            searchView = new SearchView(this.getSupportActionBar().getThemedContext());
            searchView.setSearchableInfo(searchManager.
                        getSearchableInfo(getComponentName()));

            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

             @Override
             public boolean onQueryTextSubmit(String query) {
                 // collapse the view ?
                 //menu.findItem(R.id.menu_search).collapseActionView();
                 Log.e("queryText",query);
                 return false;
             }

             @Override
             public boolean onQueryTextChange(String newText) {
                 // search goes here !!
                 // listAdapter.getFilter().filter(query);
                 Log.e("queryText",newText);
                return false;
             }


            });

        }

【讨论】:

  • 它没有崩溃。但没有得到回调..onQueryTextChange,searchClose
  • @varmashrivastava 我用 searchview 监听器更新我的代码试试看它是否有效
【解决方案2】:

试试这个。它正在工作

menu.xml

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:iconifiedByDefault="false"
    android:title="Search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always" />

Java 代码:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.sol_menu, menu);
    MenuItem menuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) menuItem.getActionView();
    searchView.setIconified(false);
    super.onCreateOptionsMenu(menu);
}

【讨论】:

  • 对我不起作用.. java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'void android.support.v7.widget.SearchView.setIconified(boolean)'
猜你喜欢
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
相关资源
最近更新 更多