何か

2016-06-18 8 views
0

を断片化するフラグメントから移動するとき、私は一つの活性と3つの断片A、Bを持っている、Cそれは私が断片Bに移動してい断片AからメインフラグメントAを保持しているフラグメントBからフラグメントCから。コードは動作し、それが断片BからフラグメントCを開きますが、最初のそれはフラグメントAとちょうどその断片Cを開きます。なぜ、どうすればこの問題を解決できますか?フラグメントB、Cをホストするためにもう1つアクティビティが必要ですか?断片を切り替える何か

方法:

private Fragment contentFragment; 
    public void switchContent(Fragment fragment, String tag){ 
     FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
     while (fragmentManager.popBackStackImmediate()); 
     if (fragment != null){ 
      FragmentTransaction transaction = fragmentManager 
        .beginTransaction(); 
      transaction.replace(R.id.content_frame,fragment,tag); 
      if (!(fragment instanceof FragmentB)){ 
       transaction.addToBackStack(tag); 
      } 
      transaction.addToBackStack(tag); 
      transaction.commit(); 
      contentFragment = fragment; 
     } 
    } 

R.id.content_frameは活性setContentViewに使用されるレイアウトのIDです。

+1

あなたがフラグメントを切り替えるために必要なのはFragmentTransactionと交換する方法です。だから、スタックスタックの内容をコメントアウトして、どうなるか見てみよう –

答えて

0

これは、現在のフラグメントを次のスタックに置き換える前に、バックスタック内のすべてのフラグメントをポップしているために発生します。あなたは、この行は必要ありません

while (fragmentManager.popBackStackImmediate()); 

また、この部分は無意味です:

if (!(fragment instanceof FragmentB)){ 
    transaction.addToBackStack(tag); 
} 
transaction.addToBackStack(tag); 

最後の行が条件を無視するため。

あなたのコードの次の方法を編集しよう、その後、FragmentB以外のスタックをバックアップするフラグメントを追加する場合:

public void switchContent(Fragment fragment, String tag) { 
    if (fragment != null) { 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(R.id.content_frame, fragment, tag); 
     if (!(fragment instanceof FragmentB)){ 
      transaction.addToBackStack(tag); 
     } 
     transaction.commit(); 
     contentFragment = fragment; 
    } 
}