1

当我回顾一个项目的旧代码时,我意识到整个项目正在使用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是空的,所以不应该有一个旧的片段来替换。

4

1 回答 1

2

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

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

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

从文档:

public abstract FragmentTransaction replace (int containerViewId, Fragment fragment, String tag)

替换已添加到容器中的现有片段。这本质上与为所有当前添加的片段调用 remove(Fragment) 相同,这些片段使用相同的 containerViewId 添加,然后使用此处给出的相同参数调用 add(int, Fragment, String)。

于 2013-10-08T14:06:39.573 回答