目前我有一项活动,并且正在添加片段(搜索,歌曲细节,设置等)。我实现了基于侧面的菜单导航,所以现在,作为一个副作用,tehre没有限制将多少碎片添加到Backstack中。 有什么方法可以限制片段数量,或删除较旧的条目?例如,每首歌的细节片段都有一个推荐的歌曲列表,然后通过它可以转到另一首歌曲的细节片段。很容易在后台堆栈中有30个碎片,如果你打开了DDMS,你可以看到堆栈大小缓慢(但肯定)增加。Android - 在backStack中限制片段数量?
编辑:我曾尝试做的一件事是,如果用户单击其中一个侧边菜单选项,如果该片段已经在后台堆叠中,则尝试返回到该片段而不是实例化新片段,但当然,如果用户在Song Details页面上,那么他会希望按回来将他带到该片段,这样就无法工作。
编辑2: 这是我addFragment方法(与菲尔的建议一起):
public void addFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 2) {
fm.popBackStack();
}
fm.beginTransaction()
.replace(R.id.fragment_container, fragment).addToBackStack("")
.commit();
}
我刚刚试了一下,假设我的历史片段是:A-> B-> C-> d,从D开始,从B→A→退出。
我刚刚进入了8级测试:A-> B-> C-> D-> E-> F-> G-> H,并且从H返回,发生同样的事情:H-> B - > A->退出。
所有片段都通过上述方法添加。我想看到的是:H-> G-> F->退出。
myFrag从哪里来?假设我在添加一个新的Fragment时正在运行这段代码,那么我是否已经必须引用所有以前的Fragments? – StackOverflowed
那么这只是一个示例代码,myFrag可以是例如当前活动的片段。这段代码也可以在if语句中调用fm.popBackStack()。 –
看起来好像你在正确的轨道上,但我想要删除最旧的碎片。请参阅编辑以获得澄清。我非常感谢你的帮助。 – StackOverflowed