【问题标题】:Giving error on my searchbar after extending AppCompatActivity扩展 AppCompatActivity 后在我的搜索栏上出现错误
【发布时间】:2015-11-02 17:01:19
【问题描述】:

在扩展 AppCompatActivity 而不是 Activity 后,我的项目出现以下错误:

java.lang.NullPointerException:尝试调用虚拟方法 '空白 android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' 在空对象引用上

我点击了这个链接[this][1],但它对我不起作用。

请给我一些关于我做错了什么的建议。

这是我的搜索代码:

 SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

这是菜单xml

  <item
    android:id="@+id/search"
    android:app:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/ic_search"
    android:app:showAsAction="collapseActionView|always"
    android:title="@string/Search"/>

【问题讨论】:

  • 像其他线程建议的那样,修复你的 menu.xml:使用自定义命名空间和支持实现,app:actionViewClass="android.support.v7.widget.SearchView"/>
  • 似乎您没有按照链接问题的答案进行操作。
  • 当我写app:actionViewClass="android.support.v7.widget.SearchView"/&gt; Eclipse 给我错误Attribute is missing the Android namespace prefix 所以我必须在app 之前写android 前缀。
  • Eclipse 已经过时了。您应该切换到 Android Studio,因为它会建议您使用简单的 Alt + enter 添加这一行 xmlns:app="http://schemas.android.com/apk/res-auto"
  • 感谢@Sufian Attribute is missing the Android namespace prefix 错误消失了。之后,它在searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 上给了我空指针执行

标签: android android-appcompat searchview


【解决方案1】:

也尝试为您的 actionViewClass 使用自定义应用命名空间:

app:actionViewClass="android.support.v7.widget.SearchView"/>

【讨论】:

  • 当我写app:actionViewClass="android.support.v7.widget.SearchView"/&gt; Eclipse 给我错误Attribute is missing the Android namespace prefix 所以我必须写android 前缀。
【解决方案2】:

您必须更改 searchview 的 actionview 类以支持和更改菜单中的架构。像这样

<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="Search"
    android:titleCondensed="false"
    android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
    android:orderInCategory="0"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

然后在代码中,您必须像这样获取搜索视图并使用展开侦听器。记得使用支持库的 SearchView。

    mSearchView = (SearchView) MenuItemCompat.getActionView(mSearchItem);
    mSearchView.setQueryHint(mContext.getString(R.string.search_messages));
    mSearchView.setIconifiedByDefault(true);
    mSearchView.setOnQueryTextListener(this);
    MenuItemCompat.setOnActionExpandListener(mSearchItem, new      MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {

            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {

            }
            return true;
        }
    });

【讨论】:

  • 这是我自己在我的一个应用程序中的实现,所以我分享了代码而不是分享参考链接。 :D 让我看看它的参考链接,我会分享。
  • 在这种情况下不用担心。
猜你喜欢
  • 2012-06-04
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多