我刚刚实现了v7 AppCompat
支持库,但在我测试的每个安卓版本(4.2.2、2.3.4...)中,MenuItemCompat.getActionView
总是返回null。
SearchView
显示在操作栏中,但它不会响应触摸操作,也不会展开以显示其EditText
,它就像一个简单的图标。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView, mOnQueryTextListener);
searchView.setIconifiedByDefault(false);
Log.d(TAG,"SearchView not null");
} else
Log.d(TAG, "SearchView is null");
}
return super.onCreateOptionsMenu(menu);
}
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/action_search"
app:showAsAction="always|collapseActionView"
android:icon="@drawable/abc_ic_search"
android:title="@string/action_bar_search"
android:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/action_refresh"
android:icon="@drawable/refresh"
android:title="@string/action_bar_refresh"
app:showAsAction="ifRoom"/>
</menu>
发布于 2013-08-26 16:25:25
最后我找到了解决方案。
对于当前的activity.
actionViewClass
的命名空间从android:actionViewClass
更改为app:actionViewClass
android.support.v7.widget.SearchView.OnQueryTextListener
接口使用setOnQueryTextListener
而不是SearchViewCompat.setOnQueryTextListener
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu,menu);MenuItem searchItem = menu.findItem(R.id.action_search);searchView SearchView = (SearchView) MenuItemCompat.getActionView(searchItem);if (searchView != null) { searchView.setOnQueryTextListener(this);} return super.onCreateOptionsMenu(menu);}
发布于 2014-10-21 02:49:15
在我的例子中,它是ProGuard文件。您需要添加下面这一行:
-keep class android.support.v7.widget.SearchView { *; }
发布于 2015-09-02 22:32:29
对我来说,不正确的menu.xml
名称空间导入导致了这个问题。
我的原始menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools">
<item android:id="@+id/action_search"
android:title="@string/map_option_search"
android:icon="@drawable/ic_action_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
看起来像是xmlns:app="http://schemas.android.com/tools"
导致MenuItemCompat.getActionView()
返回null
。将此导入更改为xmlns:app="http://schemas.android.com/apk/res-auto"
解决了此问题。
新的工作menu.xml
<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:title="@string/map_option_search"
android:icon="@drawable/ic_action_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
https://stackoverflow.com/questions/18438890
复制相似问题