我有一个罕见的问题。我有一个动态填充选项卡的活动(最多 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() 在 Fragment 的 OnCreate 中设置为 true