sea​​rchMenuItem.getActionView()返回null [英] searchMenuItem.getActionView() returning null

查看:465
本文介绍了sea​​rchMenuItem.getActionView()返回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,菜单);
    sea​​rchItem = 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:程序=htt​​p://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)

这篇关于sea​​rchMenuItem.getActionView()返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆