1

DialogFragmentsの公式の Android チュートリアルを調べています。私を少し混乱させる部分は次のとおりです。

void showDialog() {
    mStackLevel++;

    // DialogFragment.show() will take care of adding the fragment
    // in a transaction.  We also want to remove any currently showing
    // dialog, so make our own transaction and take care of that here.
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment prev = getFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    // Create and show the dialog.
    DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
    newFragment.show(ft, "dialog");
}  

したがって、私の混乱は、彼らが使用しているという事実から生じfindFragmentByTag("dialog")ます。という名前のタグを持つレイアウト XML が宣言されている場所はどこにもありませdialogん。通常の Fragmant の場合<fragment ../>、レイアウトにタグがあるので Id や tagname でフラグメントを取得できます。ここには、何もありません。

それで、何が得られますか?これはどのように作動しますか ?
また、複数ある場合はどうなりDialogFragmentsますか? findFragmentByTag("dialog");何を返しますか??

:)

4

1 に答える 1

3

フラグメントは、次の 2 つの方法でアクティビティにアタッチできます<fragment>。タグを使用してレイアウト xml で宣言することによる静的な方法。またはプログラムで and を使用FragmentManagerFragmentTransactionます。DialogFragments の場合、常に後者を使用します。

を使用するなどしてアクティビティにフラグメントをアタッチするときDialogFragment.show()に、タグを付けることができます。FragmentManagerその後、タグによってこのフラグメントを見つけることができます。この場合、コードは、FragmentManagerこのタグを持つフラグメントが既に存在するかどうかをチェックしています (これは、 が呼び出されたときにダイアログが既に表示されていた場合に当てはまると思いますshowDialog())。その場合、フラグメントの新しいインスタンスを表示する前にフラグメントを削除します (ダイアログを閉じます)。

于 2013-08-03T07:12:50.717 に答える