编程语言
首页 > 编程语言> > java-为什么onCreateOptionsMenu运行多次?

java-为什么onCreateOptionsMenu运行多次?

作者:互联网

出于某种原因,我的onCreateOptionsMenu和onPrepareOptionsMenu运行了两次(在这两个方法的开头都检查了日志输入).我有多个片段会发生这种情况,包括一些非常基本的片段(只是夸大菜单,别无其他).

这是存在此问题的onCreateOptionsMenus之一:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.actionbuttons_add_removeall, menu);
    optionsMenu = menu;
}

是什么导致这些方法被多次调用(大多数情况下两次)?

更新资料

我发现这是(以某种方式)由我使用的RecyclerView引起的.出现此问题的所有视图都使用RV,而我之前提到的视图没有此问题,的确没有.
有了这个新信息,RV的哪一部分可能会引起此问题?

更新2

我发现我在适配器的getItemCount()方法中调用了.invalidateOptionsMenu().我以为这会调用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;
        }
    }
}

解决方法:

这是我自己的错.我使RecyclerViewAdapter的getItemCount()方法中的选项菜单无效,该菜单显然在启动片段时运行.您可以检查出包含我的错误的代码的问题.感谢所有的帮助/建议.

标签:android-optionsmenu,java,android,oncreateoptionsmenu
来源: https://codeday.me/bug/20191118/2027230.html