我正在查看 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 中声明它标签;或以编程方式使用 FragmentManager
和 FragmentTransaction
.对于 DialogFragments,您将始终使用后者。
当您将 fragment 附加到 Activity 时,例如使用 DialogFragment.show()
,你可以给它一个标签。 FragmentManager
然后可以通过其标签找到该 fragment 。在这种情况下,代码正在检查是否 FragmentManager
已经有一个带有此标签的 fragment (我相信如果调用 showDialog()
时对话框已经显示,情况就会如此)。如果是这样,它会在显示 fragment 的新实例之前删除该 fragment (关闭对话框)。
关于android - 显示 DialogFragment 让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030308/