2013-05-11 15 views
19

To jest mój plik xml dla menu ActionBar.findViewById dla MenuItem zwraca wartość 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> 

W moim onCreate funkcji po nazywając setContentView. Robię favButton = (MenuItem) this.findViewById(R.id.fav_button); Ale to zwraca wartość null.

Powoduje jednak zwrócenie właściwego obiektu na funkcję onOptionsItemSelected.

Używam ActionBarSherlock, jeśli to by miało znaczenie.

Próbowałem różnych opcji sugerowanych przez inne findViewById zwraca null pytania, ale oni nie rozwiązali mojego problemu.

+0

http://www.vogella.com/articles/AndroidActionBar/article.html. sprawdź link. – Raghunandan

Odpowiedz

33

Zamiast

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

w onCreateOptionsMenu po getMenuInflater() nadmuchać (R.menu.activity_main, menu).;

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

Czy nie ma sposobu, aby uzyskać to podczas onCreate? Chciałbym móc setChecked() w oparciu o pakiet savedInstanceState. Alternatywnie, czy istnieje lepszy sposób na zapisanie sprawdzonego stanu MenuItem w obrocie? – aij

+1

Czy mogę to zrobić w onCreate? –

+0

Jest nadal pusta, dopóki nie zostanie wybrana. –

1

Użyj menu.findItem(), aby uzyskać menu. Ale trzeba to zrobić po zawyżeniu menu.

Ponadto, aby odpowiedzieć na pytanie w komentarzu, można użyć onPrepareOptionsMenu do ustawienia stanu menu. Jeśli to menu jest aktualizacją jednorazową, możesz również użyć onCreateOptionsMenu, które jest wywoływane tylko raz.

Powiązane problemy