片段 getLayoutInflater() 与 LayoutInflater.from(getContext())
Fragment getLayoutInflater() vs. LayoutInflater.from(getContext())
谁能解释一下以下代码片段中 A 和 B 的区别?
它来自 DialogFragment
。
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// A) this works
binding = DialogFragmentPeriodPickerBinding.inflate(LayoutInflater.from(context))
// B) this doesn't work: no compiler error, but dialog won't show
binding = DialogFragmentPeriodPickerBinding.inflate(layoutInflater)
[..] // binding.root is later on passed to setView(binding.root) of MaterialAlertDialogBuilder
}
layoutInflater 和 LayoutInflater.from(getContext()) 之间没有太大区别,事实上,如果您查看源代码,两者几乎是一回事。您的代码的问题是,当您在 onCreateDialog 中调用 layoutInflater 时,它尚未设置,因此我们的好朋友 android 正在尝试设置,但它失败了。因为在引擎盖下它调用 onCreateDialog(SavedInstance) 是你提到 layoutInflater 的函数,以便从对话框中获取上下文。所以我们有无限循环,这很可能会导致我们崩溃。
假设您使用的是 Fragment 1.2.3
(or Fragment 1.3.0-alpha02
,其中包含在 onCreateDialog()
中使用 layoutInflater
时对 WhosebugError
的相同修复),您应该始终使用 layoutInflater
.该片段的 layoutInflater
是唯一可以正确扩充 <fragment>
标签或其替换 FragmentContainerView
并将这些子片段正确连接到您的 DialogFragment
的片段。
但是,如果您没有在 XML 中使用子片段,您应该看不出两者之间有任何区别。
谁能解释一下以下代码片段中 A 和 B 的区别?
它来自 DialogFragment
。
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// A) this works
binding = DialogFragmentPeriodPickerBinding.inflate(LayoutInflater.from(context))
// B) this doesn't work: no compiler error, but dialog won't show
binding = DialogFragmentPeriodPickerBinding.inflate(layoutInflater)
[..] // binding.root is later on passed to setView(binding.root) of MaterialAlertDialogBuilder
}
layoutInflater 和 LayoutInflater.from(getContext()) 之间没有太大区别,事实上,如果您查看源代码,两者几乎是一回事。您的代码的问题是,当您在 onCreateDialog 中调用 layoutInflater 时,它尚未设置,因此我们的好朋友 android 正在尝试设置,但它失败了。因为在引擎盖下它调用 onCreateDialog(SavedInstance) 是你提到 layoutInflater 的函数,以便从对话框中获取上下文。所以我们有无限循环,这很可能会导致我们崩溃。
假设您使用的是 Fragment 1.2.3
(or Fragment 1.3.0-alpha02
,其中包含在 onCreateDialog()
中使用 layoutInflater
时对 WhosebugError
的相同修复),您应该始终使用 layoutInflater
.该片段的 layoutInflater
是唯一可以正确扩充 <fragment>
标签或其替换 FragmentContainerView
并将这些子片段正确连接到您的 DialogFragment
的片段。
但是,如果您没有在 XML 中使用子片段,您应该看不出两者之间有任何区别。