1. ホーム
  2. android

[解決済み] MenuItemCompat.getActionViewは常にnullを返します。

2022-05-15 16:18:59

質問

を実装したところです。 v7 AppCompat サポートライブラリですが MenuItemCompat.getActionView 私がテストしたすべてのAndroidバージョン(4.2.2, 2.3.4 ...)で、常にnullを返します。

があります。 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);
}

メニュー.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>

どのように解決するのですか?

ようやく解決策が見つかりました。

  1. の名前空間を変更する。 actionViewClass から android:actionViewClass まで app:actionViewClass

  2. 実装 android.support.v7.widget.SearchView.OnQueryTextListener インターフェイスを使用することで、現在の活動状況を確認できます。

  3. 直接使用 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);
    }