Почему этот код таймера говорит, что setText не может быть разрешен или не является переменной? - PullRequest
1 голос
/ 23 января 2011
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 ]

1 голос
/ 23 января 2011

Вы изменяете значение 'tv' в своем обновлении, поэтому вы не установили его в качестве нового textView.Измените эту строку:

 TextView tv = new TextView(this);

на

 tv = new TextView(this);

edit: Другая проблема: у вас есть отдельный класс счетчиков.Этот класс не может получить доступ к свойствам вашей деятельности countDownTest.Так что переменная "tv" там пуста.Вы не можете просто иметь случайный подкласс, используя переменные вашего суперкласса.Я думаю, что вам следует вернуться к дизайну ваших классов и выяснить, что и где?

А пока, если вы просто тестируете, вы можете сделать что-то вроде этого:

дайте вашему текстовому идентификатору (с setId() я думаю).Получите текстовое представление, используя findViewById() в вашем классе mycount.Используйте это, чтобы изменить текст.

или

Добавьте в MyCount мемер, который имеет параметр «textview», и вызовите его с помощью своего исходного телевизионного var.

0 голосов
/ 23 января 2011

nanne правильно, просто удалите тип перед этой строкой tv = new TextView (this);

Однако это единственное изменение, которое вам нужно сделать, потому что ваш класс является внутренним классом этого действия, и вы определили, что tv - это переменная для всей деятельности, которая включает в себя все методы и внутренние классы.*

С этим изменением этот код работает, я только что проверил его.

Но если ваш файл 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);  

}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...