У меня редкая проблема.У меня есть активность, в которой вкладки динамически заполнены (до 20 вкладок).Каждый фрагмент имеет реализацию OnCreateOptionsMenu
и меню, которое содержит значок закладки, который меняет цвет при нажатии.Существует переменная класса menu
типа Menu
, которая устанавливается при вызове фрагмента OnCreateOptionsMenu
.Это позволяет мне установить пункт меню закладки за пределами onCreateOptionsMenu
(это также выполняется динамически).
Проблема : когда у родительского действия есть только одна вкладка (один экземпляр фрагмента)), эта реализация работает нормально.Однако при наличии нескольких вкладок приложение вылетает с ошибкой: Attempt to invoke interface method android.view.MenuItem android.view.Menu.findItem(int)
Что я думаю : Мне кажется, проблема в том, что OnCreateOptionsMenu
вызывается один раз, т.е. переменная класса:menu
устанавливается только один раз для первой вкладки (фрагмента), следовательно, когда добавляются другие вкладки, menu
равно null
Некоторые коды : фрагмент
Menu menu;
...
...
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setMenuBookmark(ques_obj);
}
private void setMenuBookmark(QuestionAnswerList ques_obj){
MenuItem menuBookmark = this.menu.findItem(R.id.action_bookmark);
if (ques_obj.getIs_bookmarked().equals("1")) {
menuBookmark.setIcon(R.drawable.ic_bookmark_white_24dp);
} else {
menuBookmark.setIcon(R.drawable.ic_bookmark_border_white_24dp);
}
}
...
...
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.cbt_fragment_menu, menu);
this.menu = menu;
super.onCreateOptionsMenu(menu, inflater);
}
PS setHasOptionsMenu () имеет значение true в OnCreate фрагмента