问题是要正确管理回栈,以便弹出(或删除)前一个片段。问题在于它们的重叠..
程序结构如下:
- 滑动菜单,每个部分有 3 个片段:
CatalogFragment
,NewsFragment
,BlogFragment
; - 每个片段都是一个带有项目的列表视图(从 JSON 解析);
- on
CatalogFragment
的项目单击我需要将其替换CatalogFragment
为LessonsFragment
,这也是列表。
ps Items 是俄语,但我想你可以理解
这就是(动态)添加这些片段的方式:
@Override
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
// fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); //this also doesn't work
switch (position+1) {
case 1:
//getSupportFragmentManager().popBackStack(); // this doesnt work
fragmentManager.beginTransaction().replace(R.id.container,
CatalogFragment.newInstance(position + 1)).addToBackStack("catalog").commit();
break;
case 2:
fragmentManager.beginTransaction().replace(R.id.container,
NewsFragment.newInstance(position + 1)).addToBackStack("news").commit();
break;
case 3:
fragmentManager.beginTransaction().replace(R.id.container,
BlogFragment.newInstance(position + 1)).addToBackStack("blog").commit();
break;
}
}
这就是我在onCatalogFragmentInteraction
接口中用新方法替换片段的方式:
/** Methods for interaction with list items*/
@Override
public void onCatalogFragmentInteraction(String id){
//pop previous
getSupportFragmentManager().popBackStack("catalog", FragmentManager.POP_BACK_STACK_INCLUSIVE);
//add new
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, LessonsFragment.newInstance());
fragmentTransaction.addToBackStack("lessons");
fragmentTransaction.commit();
}
...而且效果很好:
但是当我从滑动菜单片段重叠回到片段时。
我相信问题在于正确的 BackStack 管理,但我不知道我做错了什么。另一个建议是在这种情况下我需要以add/replace
某种方式更好地使用。
我已经尝试从堆栈中按名称删除。也许需要通过 ID 删除它们?
PS告诉是否需要更多代码。提前致谢。