在活动中跳过片段?

时间:2015-06-21 06:07:42

标签: android android-fragments

我有3个片段的活动。第一个片段未添加到Backstack中。所以我的导航是:

A - > B - > C,或 A - > ç

我实现了import java.util.Random; import java.util.Scanner; public class LieDetector { public static void main(String[] args) { LieDetector lieDetector = new LieDetector(); lieDetector.runTest(); } public void runTest() { Scanner scanner = new Scanner(System.in); System.out.println("Type In a Question here"); String q1 = scanner.nextLine(); System.out.println("Insert Answer here"); String a1 = scanner.nextLine(); if (getRandomBoolean()) { System.out.println("you are telling the truth"); } } public boolean getRandomBoolean() { Random random = new Random(); return random.nextBoolean(); } } 以从后台堆栈中删除碎片并且它可以正常工作。

我还在操作栏上有一个按钮,它会清除片段中的信息并切换到第一个片段。

如果我在第三个片段中,然后单击按钮转到第一个片段,是否正在替换片段足以从backstack中删除第二个和第三个片段,或者我是否应该调用onNavigateUp

修改

我添加了此代码以移回第一个片段:

getFragmentManager().popBackStack()

所有switchFragment都是:

getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
switchFragment(fragmentA, false);

fragmentA.clear();

但是,即使调用protected void switchFragment(Fragment fragment, boolean addToBackStack) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.container_fragments, fragment, fragment.getClass().getSimpleName()); if (addToBackStack) { ft.addToBackStack(fragment.getClass().getSimpleName()); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); currentFragment = fragment; } ,也不会清除文本视图。

是因为片段还在创建吗?

1 个答案:

答案 0 :(得分:0)

基本上说,默认情况下FragmentTransaction AndroidOS调用替换时只会

  

删除现有片段。如果它被添加到容器中,则为其视图   也从该容器中删除。

请参阅here

并且不会pushpop来自BackStack的任何内容。所以,如果你是

  

在第三个片段中,然后单击按钮转到第一个

如果在您拨打addToBackStack()之前,那么您也应该拨打popBackStack(),如果您没有拨打addToBackStack(),则无需致电popBackStack()明确BackStack