首页 > 解决方案 > 如何在 Viewmodel 中安全地重用相同的对象变量(使用简单的计时器应用程序)?

问题描述

我正在解决 Android 中的一个自行设计的编码问题,我正在构建一个简单的计时器应用程序,该应用程序允许用户倒计时一定的时间。

我有一个显示计时器MainActivity的活动(计时器也可以从此活动启动)和一个允许用户选择倒计时时间并提交的活动(SelectActivity)。

我使用一个ViewModel包含自定义CountDownTimer类的。用户可以随时返回SelectActivity并提交新的时间。在我的代码中,我明确地将计时器设置null为如下所示(不是最好的代码,但我希望这个想法能够实现)。我model.timer = null后来加了。

问题:如果用户提交一个新的时间,MainActivity现在显示2个计数器快速连续倒计时(剩余时间显示在一个视图中)。

我的假设是,通过将计时器设置为 null,我将摆脱旧计时器。这个假设是错误的吗?我完全错误地处理这个问题吗?

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        // Check which request we're responding to
        if (requestCode == 1) {
            // Make sure the request was successful
            model.timer = null
            model.timer = MyTimer(data?.getLongExtra("Message",11) ?: 0, 10, true).apply {
                setListener(model.timerListener)
            }
            model.timerStatus.value = StateTimer.INITIALIZED
        }
    }

标签: androidkotlinarchitecture

解决方案


您能否分享一下您如何将数据传递给您的视图?此外,您似乎有另一个变量来完成这项任务

model.timerStatus.value = StateTimer.INITIALIZED

我猜这另一行正在影响您显示信息的方式,因为您正在再次初始化同一个实例。


推荐阅读