package com.android.countdown;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;
public class CountDownTest extends Activity {
TextView tv; //textview to display the countdown
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
this.setContentView(tv);
//5000 is the starting number (in milliseconds)
//1000 is the number to count down each time (in milliseconds)
MyCount counter = new MyCount(5000,1000);
counter.start();
}
//countdowntimer is an abstract class, so extend it and fill in methods
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
tv.setText(”done!”);
}
@Override
public void onTick(long millisUntilFinished) {
tv.setText(”Left: ” + millisUntilFinished/1000);
}
答案 0 :(得分:1)
您在oncreate中重新声明'tv',因此您不必将其设置为新的textView。改变这一行:
TextView tv = new TextView(this);
到
tv = new TextView(this);
编辑: 另一个问题:你有一个单独的柜台班。该类无法访问countDownTest活动的属性。所以“tv”变量在那里是空的。你不能只让一个随机子类使用你的超类的变量。 我想你应该回到你的课程设计,并弄清楚到底是什么?
与此同时,如果你只是在测试,你可以这样做:
给你的textview一个id(我认为setId()
)。
在mycount类中使用findViewById()
获取文本视图。
用它来改变文本。
或
将mymeber添加到具有参数“textview”的MyCount中,并使用您的原始tv var调用它。
答案 1 :(得分:0)
nanne是正确的删除类型之前这行tv = new TextView(this);
然而,这是您需要进行的唯一更改,因为您的类是此活动的内部类,并且您已将tv定义为包含其中所有方法和内部类的所有活动的varibale。
有了这个改变,这个代码可以工作,我刚刚测试了它。
但是如果您的MyCount文件位于单独的.java文件中,那么您需要像这样传递此视图:
MyCount counter = new MyCount(5000,1000,tv);
结束MyCount类看起来像这样:
public class MyCount extends CountDownTimer{
TextView tv;
public MyCount(long millisInFuture, long countDownInterval, TextView tvx) {
super(millisInFuture, countDownInterval);
tv = tvx;
}
@Override
public void onFinish() {
tv.setText("done!");
}
@Override
public void onTick(long millisUntilFinished) {
tv.setText("Left: " + millisUntilFinished/1000);
}}