getActionView () de mon MenuItem renvoie null

Je voudrais juste modifier la vue D'un MenuItem ActionBar par code.

Malheureusement, il semble que getActionView retourne toujours null!

Mon 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());

Le journal est:

01-11 22:13:42.884: I / (7893): * onPrepareOptionsMenu *COM.actionbarsherlock.interne.vue.menu.MenuItemWrapper@41401ac8

01-11 22:13:42.884: Je/(7893): * getActionView * null

Merci beaucoup pour toute aide

Modifier:

<?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>
30
demandé sur Ragunath Jawahar 2013-01-12 01:16:37

4 réponses

getActionView() ne fonctionne que s'il y a un actionView personnalisé à partir de setActionView.

29
répondu Gabe Sechan 2013-10-25 19:38:35

Vous devriez utiliser

app:actionLayout="@layout/menu_actionbar_basket"

C'est l'astuce si vous utilisez

android:actionLayout="@layout/menu_actionbar_basket"

Vous obtiendrez toujours une exception null dans la barre d'outils par défaut.

35
répondu Omid Heshmatinia 2016-02-20 05:03:16

Pour moi la solution qui a fonctionné, c'est d'utiliser app espace de noms au lieu d'android.

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

N'oubliez pas de le déclarer: xmlns:app="http://schemas.android.com/apk/res-auto"

27
répondu Vito Valov 2015-05-02 21:44:42

Si votre build de débogage fonctionne sans aucun problème et que le problème ne concerne que la version release, cela peut être dû à la configuration proguard. Si vous avez activé proguard dans votre application ajoutez la ligne ci dessous à proguard-rules.pro

-keep class android.support.v7.widget.SearchView { *; }
5
répondu Amol Suryawanshi 2017-03-06 08:47:39