【发布时间】:2013-08-20 01:19:24
【问题描述】:
目前我有一个活动,并且正在向其中添加片段(搜索、歌曲详细信息、设置等)。我实现了基于侧面的菜单导航,所以现在,作为副作用,将多少片段添加到 Backstack 是没有限制的。 有什么办法可以限制片段的数量,或者删除旧条目? 例如,每个歌曲详细信息片段都有一个推荐歌曲列表,通过它您可以转到另一个歌曲详细信息片段。 backstack 中很容易有 30 个片段,如果您打开 DDMS,您可以看到堆大小缓慢(但肯定)增加。
编辑:我确实尝试做的一件事是,如果用户单击了侧边菜单选项之一,如果该片段已经在后台堆栈中,则尝试返回该片段而不是实例化一个新片段,但是当然,如果用户在歌曲详细信息页面上,那么他会期望按下返回会将他带到该片段,因此这将不起作用。
编辑 2: 这是我的 addFragment 方法(连同 Phil 的建议):
public void addFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 2) {
fm.popBackStack();
}
fm.beginTransaction()
.replace(R.id.fragment_container, fragment).addToBackStack("")
.commit();
}
我刚试了一下,假设我的 Fragment 历史是:A->B->C->D,从 D 回去,去 B->A->exit。
我刚进了 8 级深度测试:A->B->C->D->E->F->G->H,然后从 H 回去,同样的事情发生了:H->B- >A->退出。
所有片段都是通过上面的方法添加的。我想看到的是:H->G->F->exit。
【问题讨论】:
标签: android android-fragments android-activity back-button