4

嗨,我不确定我做的是否正确。我在一项活动中有几个片段(未同时显示)。当我添加片段时,我是否必须检查以前的实例是否存在?我正在使用兼容性包,我的片段 CameraFragment 是一个单独的类(在它自己的文件中):

private void addNewFragment(Fragment fragment, String tag) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.frag1, fragment, tag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
}

进而 :

public void startPicTaking() {

    addNewFragment(CameraFragment.newInstance(), TAG_PIC_TAKING);

}

因此,每次用户单击按钮拍照时,我都会使用此方法,但是我应该验证片段是否已经存在并首先将其删除,还是静态方法 newInstance 确保片段不重复?

我已多次阅读该文档,但我不明白为什么这行: ft.addToBackStack(null); 它是干什么用的?我知道您可以弹出回栈并保留交易,但如何使用它以及用于什么目的?是否有必要,或者如果我不使用它,我可以跳过它?

谢谢

4

1 回答 1

2

我在一项活动中有几个片段(未同时显示)。当我添加片段时,我是否必须检查以前的实例是否存在?

不,它只会Fragment在添加它的下一个实例时创建一个新实例。它不会影响它的前一个实例。

因此,每次用户单击按钮拍照时,我都会使用此方法,但是我应该验证片段是否已经存在并首先将其删除,还是静态方法 newInstance 确保片段不重复?

如果您愿意,您可以这样做,以确保 noFragment在堆栈中出现两次。(因此,当您回击时,您不会再次获得相同的活动。)根据您的后台堆栈中出现的确切内容,您可能不想删除较低的内容。(假设用户希望在他点击后退按钮时出现之前的片段。)

我已多次阅读该文档,但我不明白为什么这行: ft.addToBackStack(null); 它是干什么用的?

Fragment对象被添加到后栈时,每次用户回击时,他们都会回到栈上的前一个项目。如果您不将项目添加到后退堆栈,则用户在点击后退按钮时将不会遇到它。

于 2012-11-13T17:17:40.053 回答