在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的评论之后,我关注的是我是否正确地绑定了数据和图像。我意识到我不是。我错误地将revenue和amountSold绑定为文本。我还试图将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
})
}
}

相关内容

最新更新