2016-05-10 14 views
0

私は2つのペインレイアウトを持っています。Android:フラグメントを移動してバックスタックに追加

私は左側にフラグメントを、右側にフラグメントを持っています。今度は、左を右のものに置き換え、右に新しいものを作成します(つまり、に移動し、右側のものを作成し、右側に新しいものを作成します)。

java.lang.IllegalStateException: Can't change container ID of fragment MyListFragment{300c6aae #1 id=0x7f070094}: was 2131165332 now 2131165331 

まあ、私は

fm.popBackStackImmediate(null, fm.POP_BACK_STACK_INCLUSIVE); 
fm.beginTransaction().remove(rightSide).commit(); 
fm.executePendingTransactions(); 

することにより、このような状況を回避することができますしかし、私はまた、ABILを持つようにしたい:

private FragmentManager fm; // assigned in onCreate 
private MyListFragment rightSide; // assigned in onCreate 

public void onClicked(Fragment fragment) { // callback 
    fm.beginTransaction().replace(R.id.left_side, rightSide).commit(); 

    leftSide = rightSide; 

    rightSide = MyListFragment.newInstance(); 
    fm.beginTransaction().replace(R.id.right_side, rightSide).commit(); 
} 

は今、この時点で私はIllegalStateException取得しますそれをバックスタックに追加します。私が後ろを押すと、右のものを取り除き、左から右に動かしたいと思います。

バックスラックに追加してトランザクションを元に戻す機能を使用して、1つのトランザクションをどのようにすることができますか?

答えて

0

は、[戻る]ボタンを押したときに全体を元に戻すためにaddToBackStack()を呼び出して、1つのトランザクションでそれをすべて行う:

private FragmentManager fm; // assigned in onCreate 
private MyListFragment rightSide; // assigned in onCreate 

public void onClicked(Fragment fragment) { // callback 

    MyListFragment newRightSide = MyListFragment.newInstance(); 

    fm.beginTransaction() 
     .remove(rightSide) 
     .replace(R.id.left_side, rightSide) 
     .replace(R.id.right_side, newRightSide) 
     .addToBackStack(null) 
     .commit(); 
} 
関連する問題