android - 显示 DialogFragment 让我感到困惑

标签 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 的标签。在里面。如果是普通的 fragment ,则有 <fragment ../>布局中的标签,以便我可以检索具有 ID 或标签名的 fragment 。在这里,没有。

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

:)

最佳答案

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

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

关于android - 显示 DialogFragment 让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030308/

相关文章:

android - 如何从android中的另一个 fragment 调用一个 fragment 类方法

android - 对话框 fragment 中的自动完成 TextView 显示 Android 中的建议

android - 无法启动 Activity ComponentInfo Caused by : android. view.InflateException

android - 协程限制?

java - 如何以编程方式将两个 fragment 添加到布局中?

android - 防止 fragment 自定义动画在屏幕旋转时播放?

android - OnMapLoadedCallback 和 OnMapReadyCallback,什么时候用哪个?

android - 如何从 SD 卡保存和获取图像 Cropped Android 的路径?

android - 自定义对话框 fragment

android - Textview : using the dialog title style: @android:style/TextAppearance. DialogWindowTitle