目前我只有一个活动,而片段正在被添加到它上面(搜索、歌曲详情、设置等)。我实现了基于侧边菜单的导航,因此,作为副作用,没有限制可以添加多少片段到后退栈中。有没有办法限制片段的数量或删除旧的条目?例如,每个歌曲详情片段都有一个推荐的歌曲列表,通过它可以进入另一个歌曲详情片段。很容易在后退栈中有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->退出。
我刚刚进行了 8 层深度测试:A->B->C->D->E->F->G->H,从 H 返回,同样的事情发生了:H->B->A->退出。
所有的 Fragment 都是通过上述方法添加的。我想看到的是:H->G->F->退出。