从片段调用setHasOptionsMenu(true)会导致对Activity中的onCreateOptionsMenu进行多次调用

fac*_*toe 9 android view fragment android-viewpager android-activity

我有一个简单的Activity包含ViewPager.我试图从我Fragment的一个菜单中添加一些菜单项,但是我得到了一些奇怪的行为.调用:setHasOptionsMenu(true);从我的片段开始,onCreateOptionsMenu()每当我更改片段时调用封闭的Activity的方法ViewPager.这是正常的吗?

Bry*_*lap 16

这绝对是"正常的".它可能不适合您的特定用例,但它绝对是预期的行为.

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

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

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