在片段中调用setHasOptionsMenu(true)会导致在Activity中多次调用onCreateOptionsMenu

我有一个简单的Activity ,其中包含一个ViewPager 。 我试图添加一些菜单项从我的Fragment之一菜单,但是我收到了一些奇怪的行为。 调用: setHasOptionsMenu(true); 从我的片段导致封闭的Activity的onCreateOptionsMenu()方法每次我在ViewPager更改片段时被ViewPager 。 这是正常的吗?

Solutions Collecting From Web of "在片段中调用setHasOptionsMenu(true)会导致在Activity中多次调用onCreateOptionsMenu"

这绝对是“正常的”。 它可能不适合你的特定用例,但它绝对是有意的行为。

看看android.support.v4.app.Fragment.setHasOptionsMenu()的源代码:

 public void setHasOptionsMenu(boolean hasMenu) { if (mHasMenu != hasMenu) { mHasMenu = hasMenu; if (isAdded() && !isHidden()) { mActivity.supportInvalidateOptionsMenu(); } } } 

你可以看到它在activity上调用了supportInvalidateOptionsMenu() ,最终导致onCreateOptionsMenu()被调用到活动和所有的片段上。 当从活动的片段pipe理器添加/删除片段时,框架如何pipe理更新选项菜单。