【发布时间】:2015-01-22 12:18:55
【问题描述】:
问题是要正确管理回栈,以便弹出(或删除)前一个片段。问题在于它们的重叠..
程序结构如下:
- 滑动菜单,每个部分有 3 个片段:
CatalogFragment、NewsFragment、BlogFragment; - 每个片段都是一个带有项目的列表视图(从 JSON 解析);
- 在
CatalogFragment的项目上单击我需要将这个CatalogFragment替换为LessonsFragment,这也是列表。
附注项目是俄文的,但我想你可以理解
这就是这些片段的添加方式(动态):
@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 删除它们?
附:告诉是否需要更多代码。 提前致谢。
【问题讨论】:
标签: android android-fragments overlapping fragment-backstack