我有一个包含Activity
的简单ViewPager
。我正试图从我的Fragment
之一向菜单中添加一些菜单项,但是我有一些奇怪的行为。从我的片段调用setHasOptionsMenu(true);
会导致每次更改onCreateOptionsMenu()
中的片段时调用封闭的Activity ViewPager
方法。这是正常的吗?
答案 0 :(得分:16)
这绝对是“正常的”。它可能不适合您的特定用例,但它绝对是预期的行为。
看一下android.support.v4.app.Fragment.setHasOptionsMenu()的来源:
public void setHasOptionsMenu(boolean hasMenu) {
if (mHasMenu != hasMenu) {
mHasMenu = hasMenu;
if (isAdded() && !isHidden()) {
mActivity.supportInvalidateOptionsMenu();
}
}
}
您可以看到它在其活动上调用supportInvalidateOptionsMenu()
,最终导致onCreateOptionsMenu()
在活动及其所有片段上被调用。当从活动的片段管理器添加/删除片段时,框架管理如何更新选项菜单。