android - 从其他类使用时,lateinit 属性绑定尚未初始化
问题描述
在MainActivity
课堂上我使用这个片段:
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
我正在尝试从其他类访问 textView 像这样
MainActivity().binding.textView.text
但我lateinit property binding has not been initialized
在这条线上遇到错误?任何人都知道如何解决它?
解决方案
当您调用 MainActivity() 时,您实际上是在创建 MainActivity 的一个新实例,但它没有绑定到任何生命周期(因此没有调用 onCreate(),因此不会膨胀您的布局)。
如果您尝试从片段访问活动,请调用:
(requireActivity() as MainActivity).binding.textView.text
编辑:请注意,如果您的片段由与 MainActivity 不同的活动托管,则此方法将引发错误
推荐阅读
- h2 - H2 设置架构更改 schema_search_path
- flutter - Flutter 中的快照是什么?
- ruby-on-rails - 视图中的 Rails 助手 - 如何渲染助手的结果?
- r - sortable包中bucketlist的选择问题
- spring - 测试spring web客户端重试
- macos - 如何在 Mac 中使用现有私钥创建密钥库文件?
- javascript - 不使用 java 脚本中的 id 元素执行追加操作
- r - 多产品和多区域的单向方差分析
- python - 如何在 mysql 数据库中执行操作并将它们插入到树视图中?
- mysql - rails generate paper_trail:install 需要访问数据库吗?