[当我尝试通过合成或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")
}
...
}
[此外,我尝试了以下片段管理器,但都没有找到我的视图:childFragmentManager,parentFragmentManager,supportFragmentManager
也很奇怪,我可以在view
对象中找到自己的视图。它在它的mChildren变量下,但具有与我的视图不同的int ID值。您可以在照片的第3个watch变量中看到,我对内部存储的view
ID进行了硬编码,并且可以找到我的EditText(尽管它是AppCompatEditText而不是普通的EditText)。显然,尽管我不能仅根据系统为我构建的视图对视图ID进行硬编码]
任何人都知道为什么吗?我检查了许多SO帖子,但没有找到与我的问题相似并且实际上已经解决的任何东西。我很想知道答案,而不仅仅是找到可行的方法而忘记了。感谢您的帮助!
我能够解决这个问题。事实证明,由于某种原因,这种情况下的调试器无法正确正确地解释view?.findviewById
,并且每次都仅返回null。但是,如果我通过在findViewById
对象上调用view
来获得视图,则一切正常。因此,我想如果还有其他人遇到此问题,请尝试使用view.findviewById
运行代码,即使调试器说返回空值也可以。