searchMenuItem.getActionView()返回null

时间:2015-01-12 13:42:07

标签: android

getActionView()返回null。我做错了什么?

我正在扩展活动并使用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;
}

清单

<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>

1 个答案:

答案 0 :(得分:2)

我看到你有app:showAsAction="always" app命名空间意味着你正在使用Appcompat v7库......

Appcompat库拥有菜单项的方法作为MenuCompat / MenuItemCompat类中的静态方法(您应该使用'em like而不是menu.methodXXX()使用MenuCompat.methodXXX(menu))< / p>

现在,要在菜单中定义actionViewClass(以及在11更新的api中添加的其他属性),您应该使用app命名空间代替android命名空间

因此android:actionViewClass应该成为app:actionViewClass

代码中的

应使用MenuItemCompat.getActionView(searchItem)代替searchItem.getActionView()

记得在菜单xml文件的根元素中添加名称空间app,如xmlns:app ="http://schemas.android.com/apk/res-auto"

也是小提示(因为你使用11作为min sdk,你的代码应该可以工作但是......)将android.widget.SearchView替换为android.support.v7.widget.SearchView因为它(标准SearchView)不能以相同的方式工作从11到最新版本的不同API版本(如果您使用API​​&gt; 11中添加的方法,使用API​​ 11在devce上使用方法,也会找到方法)