我正在开发一个带有单个 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();
转换是通过隐藏当前可见的片段,然后显示适当的片段来完成的。
ft = fragMan.beginTransaction();
ft.show(mapFragment);
ft.addToBackStack(null);
ft.commit();
这一切都很好,但是当按下后退按钮时,应用程序退出,无论哪个屏幕可见或之前的哪些事务已添加到后退堆栈。
我已经检查以确保后台堆栈正确累积记录并尝试了许多不同的转换方法变体,例如替换片段而不是隐藏/显示它们,创建片段的新实例而不是将它们存储在变量中等。据我所知,我的代码与我能找到的所有教程和示例相匹配,我什至无法找到任何类似的问题/类似问题的示例,大概是因为标准实现对其他人“有效”。
我怀疑这可能是应用程序级别的问题,例如我的清单中的一个属性(我已经对此进行了非常彻底的调查)或者我的应用程序设置方式固有的问题,它阻止了后退按钮正常工作。我可以重写 onBackPressed 来手动处理转换,但这似乎是一个非常难看的解决方法。关于为什么这可能没有按预期运行的任何想法?顺便说一句,这是在运行 Jelly Bean 的 Nexus 7 上。