显示DialogFragment令我困惑

时间:2013-08-03 07:05:57

标签: android android-fragments android-dialogfragment

我正在越过official Android tutorial for DialogFragments。有点困惑我的部分是:

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的标记。在普通Fragmants的情况下,布局中有<fragment ../>个标签,因此我可以使用Id或标记名检索片段。在这里,没有任何。

那么,是什么给出的?这是如何工作的?
另外,如果我有多个DialogFragments怎么办? findFragmentByTag("dialog");会返回什么?

:)

1 个答案:

答案 0 :(得分:3)

片段可以通过两种方式附加到Activity:静态地使用<fragment>标记在布局xml中声明它;或以编程方式使用FragmentManagerFragmentTransaction。对于DialogFragments,您将始终使用后者。

将片段附加到活动时,例如使用DialogFragment.show(),您可以为其添加标记。然后FragmentManager可以通过其标记找到此片段。在这种情况下,代码正在检查FragmentManager是否已经有一个带有此标记的片段(如果调用showDialog()时对话框已经显示,我认为就是这种情况)。如果是这样,它会在显示片段的新实例之前删除片段(取消对话框)。