小编wil*_*ack的帖子

Android - 后退按钮和片段后台无法正常工作

我正在开发一个带有片段FragmentActivity的基于片段的简单应用程序.应用程序的每个"屏幕"都包含在一个片段中,所有片段都会在应用程序启动时添加到容器布局中.

// Set up fragments in Main Activity
fragMan = getFragmentManager();
FragmentTransaction ft = fragMan.beginTransaction();
ft.add(R.id.fragment_container, settingsFragment);
ft.add(R.id.fragment_container, mapFragment);
ft.add(R.id.fragment_container, tracksFragment);
ft.add(R.id.fragment_container, waypointsFragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

通过隐藏当前可见的片段,然后显示适当的片段来完成转换.

ft = fragMan.beginTransaction();
ft.show(mapFragment);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

这一切都运行正常,但是当按下后退按钮时,应用程序退出,无论哪个屏幕可见或先前的事务已添加到后栈.

我已经检查过以确保后端堆栈正确累积记录并尝试了许多不同的转换方法变体,例如替换片段而不是隐藏/显示它们,创建片段的新实例而不是将它们存储在变量中等等.正如我所知,我的代码与我能找到的所有教程和示例相匹配,我甚至无法找到任何类似问题/类似问题的例子,大概是因为标准实现"只适用于其他人".

我怀疑它可能是应用程序级别的问题,例如我的清单中的属性(我已经非常彻底地调查过)或者我的应用程序设置方式固有的东西,这会阻止后退按钮正常运行.我可以覆盖onBackPressed来手动处理转换,但这似乎是一个非常难看的解决方法.关于为什么这可能没有按预期行事的任何想法?顺便说一句,这是运行Jelly Bean的Nexus 7.

android android-fragments fragment-backstack

6
推荐指数
1
解决办法
5711
查看次数