全局访问CountDownTimer变量

时间:2018-07-21 00:40:34

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

我只是从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代码块内。

2 个答案:

答案 0 :(得分:0)

我不知道您的应用程序的作用范围,但是您可以做几件事:

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

  • 也许您想将该值保存在您的SharedPreferences中,因此如果您关闭该应用程序,它将一直保存。

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

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

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

希望有帮助。

答案 1 :(得分:0)

<div class="header-title">
    <h1 class="title">Title 1</h1>
    <h2 class="author">Author</h2>
    <h2 class="author-info ">more from <a href="#">Author</a></h2>
</div> 

这应该是全局的(在“活动”的所有方法之后都应位于底部)

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

}

所以最后

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