如何解决在 MainActivity 中使用 viewLifecycleOwner 的正确方法是什么?
我试图弄清楚如何在 MainActivity 中正确使用 viewLifecycleOwner,我已经阅读并被告知生命周期与片段一起使用。但是,我没有在我的应用程序中实现片段。在代码中添加观察者时,我使用“this”代替 viewLifecycleOwner。这不会引起任何错误,但最终将不起作用,因为它没有在虚拟设备中正确绑定数据(运行应用程序时,它只为应用程序显示一个空白页面,没有数据或图像)。到目前为止,我在 MainActivity 中的代码如下。
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: DrinkViewModel
// Contains all the views
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// Use Data Binding to get reference to the views
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.drinkButton.setOnClickListener {
onDrinkClicked()
}
viewModel.revenue.observe(this,Observer { newRevenue ->
binding.revenueText.text = newRevenue.toString()
})
viewModel.drinksSold.observe(this,Observer { newAmount ->
binding.amountSoldText.text = newAmount.toString()
})
}
}
解决方法
在 EpicPandaForce 发表评论后,我专注于我是否正确绑定了数据和图像。我意识到我不是。我错误地将收入和金额绑定为文本。我还试图将 newRevenue 和 newAmount 设置为字符串。 Revenue 和 amountSold 应该作为整数传递。以下代码是正确的。
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: DrinkViewModel
// Contains all the views
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// Use Data Binding to get reference to the views
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.drinkButton.setOnClickListener {
onDrinkClicked()
}
viewModel.revenue.observe(this,Observer { newRevenue ->
binding.revenue = newRevenue
})
viewModel.drinksSold.observe(this,Observer { newAmount ->
binding.drinkSold = newAmount
})
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。