MenuItemCompat.getActionView always returns null MenuItemCompat.getActionView always returns null android android

MenuItemCompat.getActionView always returns null


Finally I found the solution.

  1. Changing namespace of actionViewClass from android:actionViewClass to app:actionViewClass

  2. Implementing android.support.v7.widget.SearchView.OnQueryTextListener interface for current activity.

  3. Directly use setOnQueryTextListener instead of SearchViewCompat.setOnQueryTextListener

    @Overridepublic 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);}


In my case it was ProGuard file. You need to add this line:

-keep class android.support.v7.widget.SearchView { *; }


For me, an incorrect menu.xml namespace import caused this problem.

My original menu.xml:

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

It looks like the xmlns:app="http://schemas.android.com/tools" was causing MenuItemCompat.getActionView() to return null. Changing this import to xmlns:app="http://schemas.android.com/apk/res-auto" fixed the problem.

New working menu.xml:

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