当我回顾一下项目的旧代码时,我意识到整个项目正在使用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,因此不应有旧片段进行替换。
答案 0 :(得分:1)
替换可防止您拥有多个相同的片段。
如果使用Add,则只需将片段添加到FragmentManager中。在添加之前,Replace将删除具有相同id(占据相同容器)的任何其他片段。
如果您100%确定没有先前的片段,那么您可以安全地使用“添加”。
来自文档:
public abstract FragmentTransaction replace(int containerViewId, 片段片段,字符串标记)
替换添加到容器的现有片段。这是 与当前所有人调用remove(Fragment)基本相同 添加了使用相同containerViewId添加的片段 add(int,Fragment,String)与此处给出的参数相同。