Iva*_*vic 7 android fragment android-fragments back-stack fragment-backstack
我有一个Activity与三个片段可以打电话给他们一个,乙和Ç.Fragment 一个被称为在活动onCreate().
FragmentA fragA = new FragmentA();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.activity2_layout, fragA, "A");
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
当按下某些按钮时,会被片段B或C替换,并且FragmentTransaction会调用addToBackStack().
FragmentB fragB = new FragmentB(); //or C
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.activity2_layout, fragB, "B"); //or C
transaction.addToBackStack("B"); //or C
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但是让我说我连续三次打电话给Fragment B,我怎么能阻止它自己堆叠呢?同时我希望这是可能的:B调用> C调用> B调用 - 但是当我尝试返回时我希望B只打开一次(C < B)而不是(B < C < B) .所以基本上删除第一个backStack与新的.
Abu*_*yah 12
从如何从堆栈中恢复片段是否存在,这可能非常相似,你的查询.
有一种方法可以根据事务名称或commit提供的id来弹出后栈(例如,使用Fragment的类名作为Thijs已经提到过):
String backStateName = fragment.getClass().getName();
Run Code Online (Sandbox Code Playgroud)
添加到backstack:
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack(backStateName);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
弹出时:
getSupportFragmentManager().popBackStackImmediate (backStateName, 0);
Run Code Online (Sandbox Code Playgroud)
所以在替换片段之前,我们可以检查backstack中的存在,如:
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
...
...
ft.addToBackStack(backStateName);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
请查看上述问题和接受的答案以获得更多解释.
| 归档时间: |
|
| 查看次数: |
6218 次 |
| 最近记录: |