两个单独的背板,用于标签下的碎片

时间:2016-04-05 09:43:25

标签: android android-fragments

我可以为片段设置两个不同的后栈吗?

想象一下这种情况:我的应用中有一个带有两个标签的活动:Tab ATab 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。

这可能吗?有没有办法我可以有两个不同的后台,所以我可以导航回来?做这样的事最简单的方法是什么? 谢谢

1 个答案:

答案 0 :(得分:1)

  1. 为维护标签及其相应的片段创建地图:
    Map<String, List<Fragment>> fragmentsStack = new HashMap<String, List<Fragment>>();

  2. 创建自己的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));

  3. 更换片段时,将其添加到相应的堆栈中 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); }
  4. 有关详情,请查看here.