2013-05-11 2 views
19

Это мой xml-файл для меню ActionBar.findViewById для MenuItem возвращает 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> 

В моей onCreate функции после вызова setContentView. Я делаю favButton = (MenuItem) this.findViewById(R.id.fav_button); Но это возвращает null.

Но возвращает нужный объект в функции onOptionsItemSelected.

Я использую ActionBarSherlock, если бы это имело бы значение.

Я пробовал различные варианты, предлагаемые другими findViewById, возвращает нулевые вопросы, но они не решили мою проблему.

+0

http://www.vogella.com/articles/AndroidActionBar/article.html. проверьте ссылку. – Raghunandan

ответ

33

Вместо

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

в onCreateOptionsMenu после getMenuInflater() раздуть (R.menu.activity_main, меню).

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

Невозможно получить его во время onCreate? Я хотел бы иметь возможность setChecked() на основе пакета savedInstanceState. Альтернативно, есть ли лучший способ сохранить проверенное состояние MenuItem во всех поворотах? – aij

+1

Могу ли я сделать это в onCreate? –

+0

Он по-прежнему равен нулю, пока не будет выбран –

1

Используйте menu.findItem(), чтобы получить меню. Но это нужно делать после того, как меню завышено.

Кроме того, чтобы ответить на ваш q в комментарии, вы можете использовать onPrepareOptionsMenu для настройки состояния вашего меню. Если это меню является однократным обновлением, вы также можете использовать onCreateOptionsMenu, который вызывается только один раз.

Смежные вопросы