2016-04-05 10 views
0

フラグメント用に2つの異なるバックスタックを使用できますか?タブの下のフラグメント用の2つの別々のバックスタック

このケースを想像してみましょう:アプリに2つのタブ(Tab ATab B)のあるアクティビティがあります。アクティビティが開始されると、フラグメント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にナビゲートできます。

これは可能ですか? 2つの異なるバックスタックを持つことができるので、私は戻ることができますか?そんなことをする最も簡単な方法は何ですか? は、タブを維持するためにあなたが

+0

を確認するには、(各タブのためのフラグメントのキューを作成するなど)、独自のスタックを作成する必要があります。 –

答えて

1
  1. マップを作成してありがとう、それは断片をcurrespondingだ:
    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); } }

  3. tab.setTabListener(new TabListener<SportsFragment>( this, "Sports", SportsFragment.class));スタックをcurrespondingに追加し、断片を置換します。複数の基準については
    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.

+0

フォローアップの質問:この例では、ユーザーがそれぞれのタブでA3とB2にいる間にアクティビティが強制終了され、そのアプリがバックグラウンドであった場合、バックスタックはどのように復元されますか? – user90766

関連する問題