如果存在,如何从后台恢复片段
我正在学习如何使用片段。我有三个例子Fragment在类的顶部初始化。我将片段添加到这样的活动中:
声明和初始化:
Fragment A = new AFragment();
Fragment B = new BFragment();
Fragment C = new CFragment();
替换/添加:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, A);
ft.addToBackStack(null);
ft.commit();
这些片段正常工作。每个片段都附加到活动中,并保存到后台堆栈中,没有任何问题。
所以当我发射A, C,然后B,堆栈如下所示:
| |
|B|
|C|
|A|
___
当我按下“后退”按钮时,B被摧毁C已经恢复了。
但是,当我发射片段A第二次,它不是从后台堆栈中恢复,而是添加到后台堆栈的顶部。
| |
|A|
|C|
|A|
___
但我想继续A并摧毁上面的所有碎片(如果有的话)。实际上,我只是喜欢默认的回堆栈行为。
我该如何做到这一点?
预期:(A应恢复原状,销毁顶部的碎片)
| |
| |
| |
|A|
___
编辑:(由A-C建议)
这是我的尝试代码:
private void selectItem(int position) {
Fragment problemSearch = null, problemStatistics = null;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
String backStateName = null;
Fragment fragmentName = null;
boolean fragmentPopped = false;
switch (position) {
case 0:
fragmentName = profile;
break;
case 1:
fragmentName = submissionStatistics;
break;
case 2:
fragmentName = solvedProblemLevel;
break;
case 3:
fragmentName = latestSubmissions;
break;
case 4:
fragmentName = CPExercise;
break;
case 5:
Bundle bundle = new Bundle();
bundle.putInt("problem_no", problemNo);
problemSearch = new ProblemWebView();
problemSearch.setArguments(bundle);
fragmentName = problemSearch;
break;
case 6:
fragmentName = rankList;
break;
case 7:
fragmentName = liveSubmissions;
break;
}
问题是,当我启动A然后B然后按“后退”键,B被移除A已经恢复了。第二次按“后退”键就可以退出应用程序了。但是它显示的是一个空白窗口,我不得不第三次按下才能关闭它。
同时,当我发射A,然后B,然后C,然后B再一次.。
预期:
| |
| |
|B|
|A|
___
实际:
| |
|B|
|B|
|A|
___
我应该覆盖onBackPressed()有什么可定制的还是我漏掉了什么?
慕沐林林
相关分类