从 Fragment 启动 AppCompatDialogFragment 时,AppCompatDialogFragment 视图为空
AppCompatDialogFragment views are null when starting AppCompatDialogFragment from Fragment
当我尝试访问视图(通过合成或 findViewById()
)时,我的 AppCompatDialogFragment 中返回了 null。
我尝试在 onCreateDialog()
方法中找到我的观点。我在下面附上了一张图片,这样您就可以看到调用和我的调试器结果:
我从我的 NutritionProgressFragment 启动这个 AppCompatDialogFragment,如下所示:
class NutritionProgressFragment : Fragment(), AddLogDialog.AddLogDialogListener {
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
add_log.setOnClickListener { openDialog() }
}
private fun openDialog() {
val dialog = AddLogDialog(this)
dialog.show(childFragmentManager, "example dialog")
}
...
}
此外,我尝试了以下片段管理器,none 允许找到我的视图:
childFragmentManager、parentFragmentManager、supportFragmentManager
同样奇怪的是,我可以在 view
对象中找到我的视图。它在它的 mChildren 变量下,但具有与我的视图不同的 int ID 值。您可以在照片的第 3 个监视变量中看到我对内部存储的 view
ID 进行了硬编码,并且我能够找到我的 EditText(尽管它是 AppCompatEditText 而不是普通的 EditText)。显然,虽然我不能根据系统为我构建的内容硬编码我的视图 ID
有人知道为什么吗?我已经检查了很多 SO 帖子,但没有发现任何与我的问题相似并且实际上已解决的问题。我很想知道这个问题的答案,而不是只是找到一些有用的东西而忘记了这个。感谢您的帮助!
我能够解决这个问题。事实证明,由于某种原因,这种情况下的调试器无法准确地正确解释 view?.findviewById
,并且每次都只是 returns null。但是,如果我通过在 view
对象上调用 findViewById
来获得我的意见,一切都会正常进行。所以我想如果其他人遇到这个问题,请尝试 运行 你的代码 view.findviewById
即使调试器说 returns null.
当我尝试访问视图(通过合成或 findViewById()
)时,我的 AppCompatDialogFragment 中返回了 null。
我尝试在 onCreateDialog()
方法中找到我的观点。我在下面附上了一张图片,这样您就可以看到调用和我的调试器结果:
我从我的 NutritionProgressFragment 启动这个 AppCompatDialogFragment,如下所示:
class NutritionProgressFragment : Fragment(), AddLogDialog.AddLogDialogListener {
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
add_log.setOnClickListener { openDialog() }
}
private fun openDialog() {
val dialog = AddLogDialog(this)
dialog.show(childFragmentManager, "example dialog")
}
...
}
此外,我尝试了以下片段管理器,none 允许找到我的视图: childFragmentManager、parentFragmentManager、supportFragmentManager
同样奇怪的是,我可以在 view
对象中找到我的视图。它在它的 mChildren 变量下,但具有与我的视图不同的 int ID 值。您可以在照片的第 3 个监视变量中看到我对内部存储的 view
ID 进行了硬编码,并且我能够找到我的 EditText(尽管它是 AppCompatEditText 而不是普通的 EditText)。显然,虽然我不能根据系统为我构建的内容硬编码我的视图 ID
有人知道为什么吗?我已经检查了很多 SO 帖子,但没有发现任何与我的问题相似并且实际上已解决的问题。我很想知道这个问题的答案,而不是只是找到一些有用的东西而忘记了这个。感谢您的帮助!
我能够解决这个问题。事实证明,由于某种原因,这种情况下的调试器无法准确地正确解释 view?.findviewById
,并且每次都只是 returns null。但是,如果我通过在 view
对象上调用 findViewById
来获得我的意见,一切都会正常进行。所以我想如果其他人遇到这个问题,请尝试 运行 你的代码 view.findviewById
即使调试器说 returns null.