getActionView() of my MenuItem return null

AndroidViewNullAndroid Actionbar

Android Problem Overview


I just would like to tweak the View of an ActionBar MenuItem by code.

Unfortunately, it seems that getActionView always return null!

My code:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	MenuInflater inflater = this.getSupportMenuInflater();
	inflater.inflate(R.menu.folder, menu);
	return super.onCreateOptionsMenu(menu);

}

public boolean onPrepareOptionsMenu(final Menu menu) {
	MenuItem menuFolder = menu.findItem(R.id.menu_folder);
	Log.i("", "* onPrepareOptionsMenu *" + menuFolder);
	Log.i("", "* getActionView *" + menuFolder.getActionView());

Log is:

> 01-11 22:13:42.884: I/(7893): * onPrepareOptionsMenu > *com.actionbarsherlock.internal.view.menu.MenuItemWrapper@41401ac8 > > 01-11 22:13:42.884: I/(7893): * getActionView *null

Thank a lot for any help

Edit:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item 
          android:id="@+id/menu_folder"
          android:icon="@drawable/ic_menu_archive"
          android:showAsAction="always"/>
</menu>

Android Solutions


Solution 1 - Android

you should use

app:actionLayout="@layout/menu_actionbar_basket"

thats the trick if you use

android:actionLayout="@layout/menu_actionbar_basket"

you would always get null exception in default toolbar.

Solution 2 - Android

getActionView() only works if there's a custom actionView from setActionView.

Solution 3 - Android

For me the solution that worked is to use app namespace instead of android.

app:actionViewClass="android.support.v7.widget.SearchView"

Don't forget to declare it: xmlns:app="http://schemas.android.com/apk/res-auto"

Solution 4 - Android

First Solution

This happen may be you not set actionLayout in Menu file so set your actionLayout in menu file

app:actionLayout="@layout/your_action_layout"

Second Solution and the second solution is

from

android:actionLayout="@layout/your_action_layout"

to

app:actionLayout="@layout/your_action_layout"

Solution 5 - Android

If your debug build is working without any issues and issue is only with release build then this may be because of proguard configuration. If you have enabled proguard in your application then add below line to proguard-rules.pro

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

Solution 6 - Android

in order to get the MenuItem View i use:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.someMenuItem:

            View v = findViewById(R.id.someMenuItem);
            doSomethingWithView(v);

            break;
    }

    return super.onOptionsItemSelected(item);
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWaza_BeView Question on Stackoverflow
Solution 1 - AndroidOmid HeshmatiniaView Answer on Stackoverflow
Solution 2 - AndroidGabe SechanView Answer on Stackoverflow
Solution 3 - AndroidVito ValovView Answer on Stackoverflow
Solution 4 - AndroidAli RazaView Answer on Stackoverflow
Solution 5 - AndroidAmol SuryawanshiView Answer on Stackoverflow
Solution 6 - AndroidGilView Answer on Stackoverflow