从 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.