Ответ 1
Вместо
favButton = (MenuItem) this.findViewById(R.id.fav_button);
в onCreateOptionsMenu после getMenuInflater(). inflate (R.menu.activity_main, menu);
favButton = menu.findItem(R.id.fav_button);
Это мой xml файл для меню ActionBar.
<?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, возвращает нулевые вопросы, но они не решили мою проблему.
Вместо
favButton = (MenuItem) this.findViewById(R.id.fav_button);
в onCreateOptionsMenu после getMenuInflater(). inflate (R.menu.activity_main, menu);
favButton = menu.findItem(R.id.fav_button);
Используйте menu.findItem(), чтобы получить меню. Но это нужно делать после того, как меню завышено.
Кроме того, чтобы ответить на ваш q в комментарии, вы можете использовать onPrepareOptionsMenu для установки состояния вашего меню. Если это меню является однократным обновлением, вы также можете использовать onCreateOptionsMenu, который вызывается только один раз.