searchMenuItem.getActionView()返回null [英] searchMenuItem.getActionView() returning null
问题描述
getActionView()被重调空。我究竟做错了什么?
我延长活动并使用安卓的minSdkVersion =11机器人:targetSdkVersion =19
<项目
机器人:ID =@ + ID /搜索
机器人:actionViewClass =android.widget.SearchView 机器人:图标=@绘制/ ic_action_search
机器人:showAsAction =collapseActionView | ifRoom
应用:showAsAction =总是
机器人:标题=@字符串/搜索/>@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
super.onCreateOptionsMenu(菜单); MenuInflater吹气= getMenuInflater();
inflater.inflate(R.menu.main,菜单);
searchItem = menu.findItem(R.id.search);
mSearchView =(搜索查看)searchItem.getActionView();
mSearchView.setQueryHint(搜索); 返回true;
}
清单
<活动
机器人:名字=。MainActivity
机器人:标签=@字符串/ APP_NAME>
&所述;意图滤光器>
<作用机器人:名字=android.intent.action.MAIN/> <类机器人:名字=android.intent.category.LAUNCHER/>
&所述; /意图滤光器> &所述;元数据
机器人:名字=android.app.searchable
机器人:资源=@ XML /搜索/> &所述;意图滤光器>
<作用机器人:名字=android.intent.action.SEARCH/>
&所述; /意图滤光器>
< /活性GT;
我看到你有应用:showAsAction =总是
的应用
命名空间意味着你使用的应用程序兼容性V7库...
应用程序兼容性库它拥有对菜单项静态方法方法 MenuCompat
/ MenuItemCompat
类(你应该使用'时间,而不是像 menu.methodXXX()
使用 MenuCompat.methodXXX(菜单)
)
现在,来定义菜单中,您应该使用 actionViewClass
(在API更新,然后11加和其他属性)的应用
命名空间这个代替机器人
命名
所以的android:actionViewClass
应成为应用:actionViewClass
在code,你应该使用 MenuItemCompat.getActionView(searchItem)
而不是 searchItem.getActionView()
remeber添加命名空间应用
菜单中的XML文件的根元素如的xmlns:程序=http://schemas.android.com/ APK / RES-AUTO
也小提示(如您使用的是11分钟的SDK你code应该工作正常,但...)替换 android.widget.SearchView
到 android.support.v7.widget.SearchView
,因为它(标准搜索查看)以同样的方式,以最新的一个作品不能在不同版本的API为11(你也将获得方法没有找到,如果您使用API> 11增加的方法就按设备搜索查看与API 11)
getActionView() is retuning null. What am i doing wrong?
I am extending Activity and using android:minSdkVersion="11" android:targetSdkVersion="19"
<item
android:id="@+id/search"
android:actionViewClass="android.widget.SearchView"
android:icon="@drawable/ic_action_search"
android:showAsAction="collapseActionView|ifRoom"
app:showAsAction="always"
android:title="@string/search"/>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
searchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) searchItem.getActionView();
mSearchView.setQueryHint("Search");
return true;
}
manifest
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
</activity>
I saw that you have app:showAsAction="always"
the app
namespace means that you are using Appcompat v7 library ...
Appcompat library has it owns method for menu items as static method in MenuCompat
/MenuItemCompat
classes (and you should use 'em like instead menu.methodXXX()
use MenuCompat.methodXXX(menu)
)
Now, to define a actionViewClass
(and others attributes added in api newer then 11) in menu you should use the app
namespace for this instead android
namespace
so android:actionViewClass
should become app:actionViewClass
in the code you should use MenuItemCompat.getActionView(searchItem)
instead searchItem.getActionView()
remeber to add namespace app
in root element of menu xml file like xmlns:app ="http://schemas.android.com/apk/res-auto"
also small hint (as you are using 11 as min sdk your code should works fine but ...) replace android.widget.SearchView
to android.support.v7.widget.SearchView
as it(standard SearchView) not works in the same way on different API versions from 11 to newest one(also you will get method not found if you use methods added in API > 11 to SearchView on devce with API 11)
这篇关于searchMenuItem.getActionView()返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!