如何正确使用片段

时间:2015-02-10 10:53:36

标签: android android-fragments

在我的基础Activity类中,我有链接到我从菜单调用的所有片段。

这样的事情:

BaseFragment mProjects;
BaseFragment mProfile;

public BaseFragment getFragment(FragmentType type) {
        BaseFragment fr = null;
        switch (type) {
            case PROFILE:
                fr = new Profile();
                break;
            case PROJECTS:
                fr = new Projects();
                break;
            default:
                return null;
        }

        return fr;
    }

因此,我创建了一次可从菜单访问的片段实例。好吗?或者我应该每次创建片段?如果是这样,那我怎样才能保存片段状态(数据,位置)?因为当我从片段管理器使用replace时,未调用替换片段的onSaveInstanceState。因此,当我重新打开它时,没有保存状态。

顺便说一下,我在Activity中使用onSaveInstanceState

@Override
public void onSaveInstanceState(Bundle saveInstanceState) {

    // doing things
    super.onSaveInstanceState(saveInstanceState);
}

无论如何,如果我不存储片段onSaveInstanceState的链接将永远不会调用。所以,我可以在onPause方法中存储片段状态,但这似乎是不好的解决方案。

UPD:这不是基于意见的问题。应该有使用片段的最佳实践。所以我问了这个。

2 个答案:

答案 0 :(得分:0)

也许你在FragmentActivity中犯了一个错误。

也许您在FragmentActivity中调用super.onSaveInstanceState(Bundle outState)时覆盖onSaveInstanceState

这将导致方法** onSaveInstanceState **未在片段

中调用

<强>更新 或者,当您想要显示新片段时,可以使用hide / show而不是replace ...隐藏片段不会被杀死

答案 1 :(得分:0)

在替换当前显示的片段之前,需要getSupportFragmentManager().putFragment(Bundle, String, Fragment),这会将该片段存储到Bundle中,您可以保留对它的引用,并保存到您的activity的实例状态。

getFragment方法中,首先检查您保存片段的捆绑包是否包含您要创建的片段 - getSupportFragmentManager().getFragment(Bundle, String)。这将为您提供一个可以返回和替换的片段。如果没有,请按照您当前的方式创建片段的新实例。