我有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;
}
,也不会清除文本视图。
是因为片段还在创建吗?
答案 0 :(得分:0)
基本上说,默认情况下FragmentTransaction
AndroidOS
调用替换时只会
删除现有片段。如果它被添加到容器中,则为其视图 也从该容器中删除。
请参阅here
并且不会push
或pop
来自BackStack
的任何内容。所以,如果你是
在第三个片段中,然后单击按钮转到第一个
如果在您拨打addToBackStack()
之前,那么您也应该拨打popBackStack()
,如果您没有拨打addToBackStack()
,则无需致电popBackStack()
明确BackStack