【发布时间】:2020-05-22 08:01:47
【问题描述】:
当我尝试访问视图(通过合成或 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 值。您可以在照片的第三个观察变量中看到我对内部存储的view ID 进行了硬编码,并且我能够找到我的 EditText(尽管它是 AppCompatEditText 而不是普通的 EditText)。显然,虽然我不能仅仅根据系统为我构建的内容对我的视图 ID 进行硬编码
有人知道为什么吗?我检查了许多 SO 帖子,但没有发现任何与我的问题相似且实际上已解决的问题。我很想知道这个问题的答案,而不是仅仅找到一些有用的东西然后忘记它。感谢您的帮助!
【问题讨论】:
-
我认为您指的是片段根视图,而不是您膨胀的视图。
-
我在第 26 行,因为我正在测试它是否有效(不幸的是它没有)。在第 27 行,我打电话给
view.findViewById(...,不幸的是这也不起作用。无奈之下我只试过view.rootview...哈哈 -
R.id.calories_et的布局名称是什么? -
@VenomVendor 包含
R.id.calories_et 的布局名称为dialog_add_log.xml -
@Mackalester 那么第27行是对的,第26行是错的
标签: android android-fragments android-view android-dialogfragment