首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MenuItemCompat.getActionView始终返回null

MenuItemCompat.getActionView始终返回null
EN

Stack Overflow用户
提问于 2013-08-26 15:32:28
回答 11查看 50.8K关注 0票数 142

我刚刚实现了v7 AppCompat支持库,但在我测试的每个安卓版本(4.2.2、2.3.4...)中,MenuItemCompat.getActionView总是返回null。

SearchView显示在操作栏中,但它不会响应触摸操作,也不会展开以显示其EditText,它就像一个简单的图标。

代码语言:javascript
复制
@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

代码语言:javascript
复制
<?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>
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-08-26 16:25:25

最后我找到了解决方案。

对于当前的activity.

  • Directly,
  1. actionViewClass的命名空间从android:actionViewClass更改为app:actionViewClass
  2. Implementing 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);}

票数 296
EN

Stack Overflow用户

发布于 2014-10-21 02:49:15

在我的例子中,它是ProGuard文件。您需要添加下面这一行:

代码语言:javascript
复制
-keep class android.support.v7.widget.SearchView { *; }
票数 84
EN

Stack Overflow用户

发布于 2015-09-02 22:32:29

对我来说,不正确的menu.xml名称空间导入导致了这个问题。

我的原始menu.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18438890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档