5

このメソッドを呼び出して、AFragからBFragに進みます。

showFragment()
{ 
    FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();

    // Add fragment to the container ContentView 
    fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());

    // Add FADE effect
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);   

    // Keep the transaction in the back stack so it will be reversed when backbutton is pressed
    fragmentTransaction.addToBackStack(null);

    // Commit transaction
    fragmentTransaction.commit();
}

新しいフラグメント(BFrag)が表示され、前のフラグメント(AFrag)が置き換えられ、トランザクションに関する情報が保持されるため、戻るボタンを押すと自動的に元に戻す/元に戻すことができます。

戻るボタンを押すと、すべてが正常に見え、前のフラグメントが表示されます(AFrag)。しかし、もう一度進むと(AFrag-> BFrag)、「フラグメントはすでに追加された例外」が発生しました。

リバース/アンドゥ操作で新しいフラグメント(BFrag)が削除されませんでしたか?これは予想される動作ですか?

この後、私はチェックを設定することにしたので、それは奇妙です:

 if(mBFrag.isAdded()) 
 {
    fragmentTransaction.show(mBFrag);
 }
 else 
 {
   fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
 }

それでも、elseステートメントに入ります...そして例外が発生します。

私が間違っていることについて何か洞察をお願いします。

どうも。

4

1 に答える 1

4

remove()などの他のメソッドを使用してから、add()を実行しようとしましたか。または同様のもの?他の投稿で、replace()メソッドが常に正しく動作するとは限らないことがわかりました。

于 2011-06-10T07:16:12.027 に答える