2013-05-11 14 views
19

Questo è il mio file xml per il menu ActionBar.findViewById per MenuItem restituisce null

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
      android:id="@+id/fav_button" 
      android:title="Favourite" 
      android:icon="@drawable/unstar" 
      android:showAsAction="always|withText" /> 
</menu> 

Nella mia funzione onCreate, dopo chiamare setContentView. Lo faccio favButton = (MenuItem) this.findViewById(R.id.fav_button); Ma questo restituisce null.

Ma restituisce l'oggetto corretto sulla funzione onOptionsItemSelected.

Sto usando ActionBarSherlock, se questo avrebbe fatto la differenza.

Ho provato varie opzioni suggerite da altri findViewById restituisce domande nulle, ma non hanno risolto il mio problema.

+0

http://www.vogella.com/articles/AndroidActionBar/article.html. controlla il link – Raghunandan

risposta

33

Invece di

favButton = (MenuItem) this.findViewById(R.id.fav_button); 

in onCreateOptionsMenu dopo getMenuInflater() gonfiare (R.menu.activity_main, menu).;

favButton = menu.findItem(R.id.fav_button); 
+2

Non c'è modo di ottenerlo durante onCreate? Mi piacerebbe essere in grado di setChecked() basato sul pacchetto SavedInstanceState. In alternativa, c'è un modo migliore per salvare lo stato verificato di un MenuItem attraverso le rotazioni? – aij

+1

Posso farlo in onCreate? –

+0

È ancora nullo finché non viene selezionato –

1

Utilizzare menu.findItem() per ottenere il menu. Ma questo deve essere fatto dopo che il menu è stato gonfiato.

Inoltre, per rispondere a q nel commento, è possibile utilizzare onPrepareOptionsMenu per impostare lo stato del menu. Se questo menu è un aggiornamento una tantum, puoi utilizzare anche onCreateOptionsMenu, che viene chiamato una sola volta.

Problemi correlati