出于某种原因,我的onCreateOptionsMenu
和onPrepareOptionsMenu
运行了两次(在两种方法开始时都使用日志输入进行检查)。这发生在我拥有的多个片段上,包括一些非常基本的片段(只是膨胀菜单,没有别的)。
这是onCreateOptionsMenu
有此问题的 s 之一:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.actionbuttons_add_removeall, menu);
optionsMenu = menu;
}
什么可能导致这些方法被多次调用(主要是两次)?
更新
我发现这是由RecyclerView
我正在使用的(以某种方式)引起的。有这个问题的所有视图都使用 RV,我之前提到的视图没有这个问题,确实没有。有了这些新信息,RV 的哪一部分可能会造成这个问题?
更新2
我发现我.invalidateOptionsMenu()
在getItemCount()
. Adapter
我以为这会调用onPrepareOptionsMenu()
,但阅读文档,它似乎调用了onCreateOptionsMenu()
. 我可能在这里颠倒过来onCreate..()
,onPrepare..()
现在要检查一下。
更新3
我刚刚意识到我RecyclerViewAdapter
在getItemCount()
方法中的选项菜单无效,该方法显然在第一次创建片段时运行。
@Override
public int getItemCount() {
int tableSize = getTableSizeMethod();
if (tableSize < 1) {
if (!AppManagerFragment.hideDeleteAllButton) {
AppManagerFragment.hideDeleteAllButton = true;
((Activity) context).invalidateOptionsMenu();
return 0;
}
} else {
if (!AppManagerFragment.hideDeleteAllButton) {
AppManagerFragment.hideDeleteAllButton = false;
((Activity) context).invalidateOptionsMenu();
return tableSize;
}
}
}