4

こんにちは私は正しいことをしているのかわかりません。1つのアクティビティに複数のフラグメントがあります(同時に表示されていません)。フラグメントを追加するときに、前のインスタンスが存在するかどうかを確認する必要がありますか?互換性パッケージを使用していますが、フラグメントCameraFragmentは(独自のファイル内の)別のクラスです。

private void addNewFragment(Fragment fragment, String tag) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.frag1, fragment, tag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
}

その後 :

public void startPicTaking() {

    addNewFragment(CameraFragment.newInstance(), TAG_PIC_TAKING);

}

したがって、ユーザーがボタンをクリックして写真を撮るたびに、このメソッドを使用しますが、フラグメントがすでに存在するかどうかを確認して最初に削除するか、静的メソッドnewInstanceでフラグメントが複製されていないことを確認しますか?

ドキュメントを数回読んだことがありますが、次の行の理由がわかりません。ft.addToBackStack(null); それはなんのためですか?バックスタックをポップしてトランザクションを維持できることは知っていますが、どのように、そして何のために使用できますか?それは必要ですか、それとも使用しない場合はスキップできますか?

ありがとう

4

1 に答える 1

2

1 つのアクティビティに複数のフラグメントがあります (同時には表示されません)。フラグメントを追加するとき、以前のインスタンスが存在するかどうかを確認する必要がありますか?

Fragmentいいえ、次のインスタンスを追加するときに、その新しいインスタンスを作成するだけです。以前のインスタンスには影響しません。

ユーザーがボタンをクリックして写真を撮るたびに、このメソッドを使用しますが、フラグメントが既に存在するかどうかを確認して最初に削除するか、静的メソッド newInstance でフラグメントが重複していないことを確認しますか?

必要に応じて、noFragmentがスタックに 2 回表示されるようにすることもできます。(したがって、反撃しても、同じアクティビティが再び発生することはありません。) バック スタックに何が表示されるかによっては、下位のものを削除したくない場合があります。(ユーザーが戻るボタンを押したときに前のフラグメントが表示されることを期待していると考えてください。)

ドキュメントを何度か読みましたが、次の行の理由がわかりません: ft.addToBackStack(null); それはなんのためですか?

オブジェクトがバック スタックに追加されるとFragment、ユーザーがヒットバックするたびに、スタックの前のアイテムに移動します。バック スタックにアイテムを追加しないと、ユーザーが [戻る] ボタンを押してもアイテムに遭遇しません。

于 2012-11-13T17:17:40.053 に答える