Kotlin 在MainActivity中使用viewLifecycleOwner的正确方法是什么?

Kotlin 在MainActivity中使用viewLifecycleOwner的正确方法是什么?,kotlin,android-fragments,android-lifecycle,observers,Kotlin,Android Fragments,Android Lifecycle,Observers,我正在试图弄清楚如何在MainActivity中正确使用viewLifecycleOwner,我已经阅读并被告知生命周期与片段一起使用。但是,我没有在我的应用程序中实现片段。在代码中添加观察者时,我使用“this”代替viewLifecycleOwner。这不会引起任何错误,但最终不会起作用,因为它无法在虚拟设备中正确绑定数据(运行应用程序时,它只会为应用程序显示一个空白页,没有数据或图像)。到目前为止,MainActivity中的代码如下 class MainActivity : AppCom

我正在试图弄清楚如何在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设置为字符串。收入和销售额应该作为整数传递。以下代码是正确的

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
        })
    }
}

听起来你没有设置数据和图像,谢谢你的评论。观察者不会在发生更改时更新图像和数据吗?这取决于您的ViewModel代码,它不是问题的一部分。正如您之前提到的,我在设置数据和图像时犯了一个错误。我不小心试图用字符串返回数字。虽然它没有抛出错误,但不会显示数据。我还错误地尝试将数字绑定为文本。谢谢你的帮助