2013-01-11 10 views
28

Vorrei solo modificare la vista di un menu di ActionBar per codice.getActionView() del mio MenuItem restituisce null

Sfortunatamente, sembra che getActionView restituisca sempre null!

Il mio codice:

@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 è:

01-11 22: 13: 42,884: I/(7893): * onPrepareOptionsMenu * com.actionbarsherlock.internal.view. [email protected]

01-11 22: 13: 42,884: I/(7893): * * getActionView nullo

Grazie molto per qualsiasi aiuto

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

Mostrare "R.menu.folder". –

+0

aggiunto nella domanda –

risposta

28

getActionView() funziona solo se c'è un ActionView personalizzato da setActionView.

+6

Esiste un'alternativa per accedere alla visualizzazione di MenuItem? –

+0

Depends. Vuoi modificare solo questo pulsante o tutti i pulsanti? Se è solo questo pulsante, probabilmente dovresti impostare una visualizzazione personalizzata. Se sono tutti i pulsanti, probabilmente dovresti usare gli stili se possibile. Quali cambiamenti stai cercando di fare? –

+2

Voglio mettere un "badge" su un'icona quando ci sono nuovi contenuti nell'applicazione, quindi ho bisogno della vista per aggiungere questo piccolo contatore –

25

Per me la soluzione che ha funzionato è quella di utilizzare lo spazio app anziché Android.

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

Non dimenticate di dichiararlo: xmlns:app="http://schemas.android.com/apk/res-auto"

+0

È inoltre possibile utilizzare l'attributo actionLayout per impostare layout personalizzati. Nel mio caso stavo usando uno Spinner che avevo definito nel suo xml. –

21

si dovrebbe usare

app:actionLayout="@layout/menu_actionbar_basket" 

questo è il trucco se utilizzare

android:actionLayout="@layout/menu_actionbar_basket" 

si farebbe sempre ottenere null eccezione nella barra degli strumenti predefinita.

+0

grazie @Smartiz, risparmi le mie ore;) – immodi

3

Se la build di debug funziona senza problemi e il problema riguarda solo la build di rilascio, questo potrebbe dipendere dalla configurazione di proguard. Se hai abilitato proguard nella tua applicazione, aggiungi sotto la riga a proguard-rules.pro

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