Moh*_*hin 142 android searchview android-search android-actionbar-compat
我刚刚实现了v7 AppCompat支持库,但在MenuItemCompat.getActionView我测试的每个Android版本中总是返回null(4.2.2,2.3.4 ....)
该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);
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
Moh*_*hin 296
最后我找到了解决方案.
将名称空间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);
}
Run Code Online (Sandbox Code Playgroud)Iva*_*nov 85
就我而言,它是ProGuard文件.你需要添加这一行:
-keep class android.support.v7.widget.SearchView { *; }
Run Code Online (Sandbox Code Playgroud)
Sea*_*eau 42
对我来说,错误的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>
Run Code Online (Sandbox Code Playgroud)
它看起来像是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>
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为问题是您使用Support V7包中的SearchView,并且您的API级别可能设置为..... 22 ??.
将代码更改为以下内容以解决问题:
menu.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_search"
android:icon="@drawable/actionbar_button_search"
android:title="Search"
android:showAsAction="always"
android:actionViewClass="android.widget.SearchView" />
</menu>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48843 次 |
| 最近记录: |