[AppCompatDialogFragment从片段启动AppCompatDialogFragment时,视图为空

问题描述 投票:1回答:1

[当我尝试通过合成或findViewById()访问视图时,我在AppCompatDialogFragment中返回null。

我尝试在onCreateDialog()方法中找到我的观点。我在下面附加了此图像,以便您可以看到调用和调试器结果:

enter image description here

我像这样从我的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")
    }
...
}

[此外,我尝试了以下片段管理器,但都没有找到我的视图:childFragmentManager,parentFragmentManager,supportFragmentManager

也很奇怪,我可以在view对象中找到自己的视图。它在它的mChildren变量下,但具有与我的视图不同的int ID值。您可以在照片的第3个watch变量中看到,我对内部存储的view ID进行了硬编码,并且可以找到我的EditText(尽管它是AppCompatEditText而不是普通的EditText)。显然,尽管我不能仅根据系统为我构建的视图对视图ID进行硬编码]

任何人都知道为什么吗?我检查了许多SO帖子,但没有找到与我的问题相似并且实际上已经解决的任何东西。我很想知道答案,而不仅仅是找到可行的方法而忘记了。感谢您的帮助!

android android-fragments android-view android-dialogfragment
1个回答
0
投票

我能够解决这个问题。事实证明,由于某种原因,这种情况下的调试器无法正确正确地解释view?.findviewById,并且每次都仅返回null。但是,如果我通过在findViewById对象上调用view来获得视图,则一切正常。因此,我想如果还有其他人遇到此问题,请尝试使用view.findviewById运行代码,即使调试器说返回空值也可以。

© www.soinside.com 2019 - 2024. All rights reserved.