【发布时间】:2014-01-19 10:49:46
【问题描述】:
我创建了一个带有主/细节片段导航的视频应用。此应用只有一个 Activity。
从列表片段中,您单击录制图标以导航到相机预览以录制视频。
假设我的 ListFragment 是 [1],我的相机预览片段是 [2],我的细节片段是 [3]。现在我的导航是 [1] - [2] - [3]。
现在当用户 3 岁并按下后退按钮时,我相信应用程序正试图导航回 [2] 并且应用程序崩溃。我希望应用程序在用户按下后退按钮时始终导航回 [1]。
我玩过 addToBackStack 的不同组合,但似乎没有任何效果。可以的话请帮忙!
所有这些代码都来自主要活动:
首次进入应用时(打开[1]):
VideoListFragment videoListFragment = new VideoListFragment();
videoListFragment.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction()
.add(R.id.container, videoListFragment)
.commit();
导航到 [2] 时:
CameraFragment cameraFragment = new CameraFragment();
getFragmentManager().beginTransaction()
.replace(R.id.container, cameraFragment)
.commit();
导航到 [3] 时:
VideoDetailFragment videoDetailFragment = new VideoDetailFragment();
Bundle args = new Bundle();
args.putString(VideoDetailFragment.UUID, String.valueOf(uuid));
videoDetailFragment.setArguments(args);
getFragmentManager().beginTransaction()
.replace(R.id.container, videoDetailFragment, "VideoDetailFragment")
.addToBackStack(null)
.commit();
更新: 好的,我已经通过在主要活动中使用此方法覆盖后退按钮来使导航正常工作:
@Override
public void onBackPressed() {
if (getFragmentManager().findFragmentByTag("VideoDetailFragment") != null) {
// I'm viewing VideoDetailFragment
getFragmentManager().beginTransaction()
.replace(R.id.container, new VideoListFragment())
.addToBackStack(null)
.commit();
} else {
super.onBackPressed();
}
}
但是现在一旦我回到 ListFragment 中,当我按下后退按钮时它什么也不做?我无法退出应用程序?
【问题讨论】: