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