在第一次提交时是否有任何理由使用FragmentTransaction.replace而不是FragmentTransaction.add?

时间:2013-10-08 14:01:18

标签: android

当我回顾一下项目的旧代码时,我意识到整个项目正在使用FragmentTransaction.replace而不是FragmentTransaction.add

public class UpgradePremiumFragmentActivity extends SherlockFragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        if (savedInstanceState == null) {
            UpgradePremiumFragment upgradePremiumFragment = UpgradePremiumFragment.newInstance();
            getSupportFragmentManager().beginTransaction().replace(R.id.content, upgradePremiumFragment).commitAllowingStateLoss();
        } else {
        }
    }

我想知道,在上述情况下使用replace代替add是否有任何理由?由于savedInstanceState为null,因此不应有旧片段进行替换。

1 个答案:

答案 0 :(得分:1)

替换可防止您拥有多个相同的片段。

如果使用Add,则只需将片段添加到FragmentManager中。在添加之前,Replace将删除具有相同id(占据相同容器)的任何其他片段。

如果您100%确定没有先前的片段,那么您可以安全地使用“添加”。

来自文档:

  

public abstract FragmentTransaction replace(int containerViewId,   片段片段,字符串标记)

     

替换添加到容器的现有片段。这是   与当前所有人调用remove(Fragment)基本相同   添加了使用相同containerViewId添加的片段   add(int,Fragment,String)与此处给出的参数相同。