在扩展AppCompatActivity而不是Activity之后,我的项目出现以下错误:
java.lang.NullPointerException:尝试调用虚方法 '空隙 android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' 在空对象引用上
我跟着这个链接[这] [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"/>
答案 0 :(得分:1)
尝试使用 actionViewClass 的自定义应用名称空间:
app:actionViewClass="android.support.v7.widget.SearchView"/>
答案 1 :(得分:1)
您必须更改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并像这样使用expand listent。请记住使用支持库的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;
}
});