嗨,我不确定我做的是对的。我在一个活动中有几个片段(未同时显示)。当我添加片段时,我是否必须检查以前的实例是否存在?我正在使用兼容包,我的片段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); 这是为了什么?我知道你可以弹出后台堆栈并保持交易,但它如何使用和什么?是否有必要或如果我不使用它我可以跳过它?
感谢
答案 0 :(得分:2)
我在一个活动中有几个片段(未同时显示)。当我添加片段时,我是否必须检查以前的实例是否存在?
不,它只会在添加下一个实例时创建该Fragment
的新实例。它不会影响它的前一个实例。
因此每次用户点击按钮拍照时我都会使用这种方法但是我应该验证片段是否已经存在并先删除它,还是静态方法newInstance确保片段不重复?
如果您愿意,可以这样做,以确保堆栈中没有Fragment
两次出现。 (因此,当您回击时,您不会再次获得相同的活动。)根据您的后台堆栈中出现的确切内容,您可能想要删除较低的内容。 (考虑到用户希望以前的片段在他按下后退按钮时出现。)
我已多次阅读该文档,但我不明白为什么行:ft.addToBackStack(null);这是为了什么?
当Fragment
个对象被添加到后台堆栈时,每次用户回击时,它们都会转到堆栈上的上一个项目。如果您没有将项目添加到后台堆栈,用户在点击后退按钮时将不会遇到它。