【问题标题】:Accessing CountDownTimer variable globally全局访问 CountDownTimer 变量
【发布时间】:2018-07-21 00:40:34
【问题描述】:

我刚开始使用 Kotlin 制作 Android 应用程序(这是我的第一个编程语言),我正在使用 CountDownTimer。我想全局访问 p0 参数,但我不知道如何访问。代码如下:

class MainActivity : AppCompatActivity() { 

    var score: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

      var timeTimer = object : CountDownTimer(10000, 1000) {
          override fun onFinish() {
              timeView.text = "Time's up!"
          }

          override fun onTick(p0: Long) {
              timeView.text = "Time's left: " + p0/1000
          }
      }.start()
    }

    fun point (view: View) {
        score++
        p0 = p0 + 1000
        scoreView.text = "Score: $score"
    }
}

通过单击按钮调用功能点。我想要实现的目标是每次用户单击按钮时使 CountDownTimer 延长 1 秒。

这行p0 = p0 + 1000 显然不起作用,因为 p0 在另一个代码块中。有没有办法让它在全球范围内可访问?我曾考虑将 CountDownTimer 放在 onCreate 之外并在 onCreate 中启动它,但我认为它仍然无法正常工作,因为 p0 仍在 CountDownTimer 代码块内。

【问题讨论】:

  • 你在哪里初始化 p0?你可以把 var p0:Int = 0 放在分数下面

标签: android kotlin global-variables android-view countdowntimer


【解决方案1】:
var timeTimer = object : CountDownTimer(10000, 1000) {
      override fun onFinish() {
          timeView.text = "Time's up!"
      }

      override fun onTick(p0: Long) {
          timeLeft = p0  //timeLeft is global --only way I think to keep track remaining time.
          timeView.text = "Time's left: " + p0/1000
      }
  }.start()

这应该是全局的(在Activity的所有方法之后最好放在底部)

fun resetTimer(time){
   timeTimer.cancel()
   timeTimer = object : CountDownTimer(time, 1000) {
      override fun onFinish() {
          timeView.text = "Time's up!"
      }

      override fun onTick(p0: Long) {
          timeLeft = p0  
          timeView.text = "Time's left: " + p0/1000
      }
  }.start()

}

终于

fun point (view: View) {
    score++
    resetTimer(timeLeft + 1000)
    scoreView.text = "Score: $score"
}

【讨论】:

  • 完美运行!正是我想要的。谢谢你:)
【解决方案2】:

我不知道您的应用的影响范围有多大,但您可以做几件事:

  • 为您的应用程序创建一个自定义应用程序类并检查那里的变量。您需要创建一个从Application 扩展的类,并将该类添加到您的清单中,在android:name 属性下的<application/> 标记中。您可以像 Singleton 一样使用它,从任何地方访问您的自定义 Application 类,例如 MyApp.getInstance().setPvalue(someIntValue)

  • 也许您想将该值保存在 SharedPreferences 中,以便在您关闭应用程序时保持保存。

  • 也许您希望在服务中拥有该值,因此如果您关闭应用程序,计时器仍将倒计时。

前几天我回答了一个非常相似的问题:

How to keep the countDownTimer counts after i swap the activity?

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多