Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在片段事务中添加并替换堆栈是否可以?_Android_Android Fragments_Fragmenttransaction - Fatal编程技术网

Android 在片段事务中添加并替换堆栈是否可以?

Android 在片段事务中添加并替换堆栈是否可以?,android,android-fragments,fragmenttransaction,Android,Android Fragments,Fragmenttransaction,对下面的代码有什么想法吗?在我的测试中,我发现被替换的片段没有被破坏,当弹出后堆栈时,实例仍然存在。只是想验证这是使用片段事务的有效方法 getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(frame, fragmentB).commit(); 我使用replace的原因是它会导致被替换的片段运行其退出动画 您可以参考android designer指南了解片段事务: 具体如下: // Cre

对下面的代码有什么想法吗?在我的测试中,我发现被替换的片段没有被破坏,当弹出后堆栈时,实例仍然存在。只是想验证这是使用片段事务的有效方法

getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(frame, fragmentB).commit();

我使用replace的原因是它会导致被替换的片段运行其退出动画

您可以参考android designer指南了解片段事务:

具体如下:

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

因此,是的,您所做的是替换片段的正确方法。

我猜您是有意保留被替换的片段,但不想将其重新弹出?它将重新弹出,这就是我将其添加到后堆栈的原因。我之所以使用replace,是因为它会使被替换的片段运行其退出动画。在这种情况下,您应该使用它。请参阅并搜索
transaction.addToBackStack(null)。是一样的。哦,哇!没想到会在文档中看到:)将其作为答案提交,我会接受。谢谢你,杰森!我想你忘了承诺。getFragmentManager().beginTransaction().replace(R.id.container,new ArticleFragment()).addToBackStack(null.commit();在这种情况下,会始终创建newFragment还是使用它的现有实例?例如:我们有片段1,片段2,片段3。我们按以下顺序多次调用transaction.replace(container,Fragment_X):1,2,3,1,3,2,1等等。。片段_1的所有出现是相同的还是在我们在事务中使用它们时都将重新创建它们。替换(…)?10q@Ewoks
transaction.replace
仅将片段容器中当前的内容替换为传递给第二个参数的任何片段。所以在回答中,我每次都创建一个新的
ExampleFragment
,因此每次片段都是全新的。如果有对片段的引用,则不必重新创建片段,只需调用
transaction。用对保留片段的引用替换
。但在你的例子中,如果你选择抓住同一个片段_1/2/3,那么对于向后导航的用户来说,后退会很奇怪。