为什么这个计时器代码说setText无法解析或不是变量?

时间:2011-01-23 15:58:23

标签: android eclipse

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

}

2 个答案:

答案 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);  

}}