我可以为片段设置两个不同的后栈吗?
想象一下这种情况:我的应用中有一个带有两个标签的活动:Tab A
和Tab B
。当Activity开始时,片段A1显示在选项卡A下。Tab A
下有片段A1,从那里你可以去片段A2,从A2到片段A3。
类似地,Tab B
显示片段B1,然后您可以转到片段B2。
TAB A TAB B
A1 B1
| |
V V
A2 B2
|
V
A3
如果显示片段A3并且用户点击回来,我希望他转到A2并再次回到A3。同样适用于Tab b B
下的片段。
用例可以是:A1 -> B1 -> B2 -> A2 -> A3
,然后点击返回将导致A3 - > A2 - > A1并且如果用户将Tab更改为B,则他应该能够从B2导航到B1。
这可能吗?有没有办法我可以有两个不同的后台,所以我可以导航回来?做这样的事最简单的方法是什么? 谢谢
答案 0 :(得分:1)
为维护标签及其相应的片段创建地图:
Map<String, List<Fragment>> fragmentsStack = new HashMap<String, List<Fragment>>();
创建自己的tablistener来处理与该选项卡的切换,并将其设置为所有选项卡。在tablistener onTabSelected中设置当前选定的选项卡,如果是第一次,则显示默认片段,否则先前从该选项卡中选择片段。
@Override
public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
mainActivity.setCurrentSelectedTabTag(tag);
if (tabFirstFragment != null) {
Fragment nextFragment = mainActivity.getLastFragment();
fragmentTransaction.replace(android.R.id.content, nextFragment);
} else {
tabFirstFragment = (SherlockFragment) SherlockFragment.instantiate(mainActivity, fragmentClass.getName());
mainActivity.createStackForTab(tag);
fragmentTransaction.replace(android.R.id.content, tabFirstFragment);
mainActivity.addFragmentToStack(tabFirstFragment);
}
}
和tab.setTabListener(new TabListener<SportsFragment>(
this, "Sports", SportsFragment.class));
public void showFragment(Fragment nextFragment) {
FragmentTransaction transaction = this.getSupportFragmentManager().beginTransaction();
transaction = transaction.replace(android.R.id.content, nextFragment);
transaction.commit();
fragmentsStack.get(currentSelectedTabTag).add(nextFragment);
}
有关详情,请查看here.