从片段导致多次调用onCreateOptionsMenu在活动中调用setHasOptionsMenu(真) [英] Calling setHasOptionsMenu(true) from a fragment results in multiple calls to onCreateOptionsMenu in Activity

查看:2242
本文介绍了从片段导致多次调用onCreateOptionsMenu在活动中调用setHasOptionsMenu(真)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的活动包含 ViewPager 。我试图某些菜单项,从我的片段■一个添加到菜单,但我得到一些奇怪的行为。呼叫: setHasOptionsMenu(真); 从我的片段导致封闭活动的 onCreateOptionsMenu()方法被调用每次我更改 ViewPager 片段。这正常吗?

I have a simple Activity that contains a ViewPager. I'm attempting to add some menu items to the menu from one of my Fragments, however I'm getting some strange behavior. Calling: setHasOptionsMenu(true); from my fragment results in the enclosing Activity's onCreateOptionsMenu() method to be called every time I change fragments in the ViewPager. Is this normal?

推荐答案

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

It's absolutely "normal." It may not fit with your particular use case, but it's definitely intended behavior.

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

Take a look at the source for android.support.v4.app.Fragment.setHasOptionsMenu():

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

您可以看到它调用 supportInvalidateOptionsMenu()上的活动,最终导致 onCreateOptionsMenu()被称为上的活性和它的所有片段。这是怎样的框架管理更新由一个活动的片段管理器中删除当一个片段添加了选项菜单/。

You can see it calls supportInvalidateOptionsMenu() on it's activity, which ultimately leads to onCreateOptionsMenu() being called on the activity and all of it's fragments. It's how the framework manages updating the options menu when a fragment is added/removed from an activity's fragment manager.

这篇关于从片段导致多次调用onCreateOptionsMenu在活动中调用setHasOptionsMenu(真)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆