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。对于普通的 Fragmants,<fragment ../>布局中有标签,因此我可以检索带有 Id 或标记名的片段。在这里,没有。

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

:)

4

1 回答 1

3

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

当您将片段附加到 Activity 时,例如使用DialogFragment.show(),您可以给它一个标签。然后FragmentManager可以通过它的标签找到这个片段。在这种情况下,代码正在检查是否FragmentManager已经有一个带有这个标签的片段(我相信如果对话框在showDialog()被调用时已经显示出来)。如果是这样,它会在显示片段的新实例之前删除片段(关闭对话框)。

于 2013-08-03T07:12:50.717 回答