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);
}
Вы обновляете 'tv' в своем oncreate, поэтому вы не задали его как новый textView. Измените эту строку:
TextView tv = new TextView(this);
в
tv = new TextView(this);
изменить: Другая проблема: у вас есть отдельный класс счетчиков. Этот класс не может получить доступ к свойствам вашей активности countDownTest. Таким образом, переменная "tv" там пуста. Вы не можете просто использовать случайный подкласс, используя vars вашего суперкласса. Я думаю, вы должны вернуться к дизайну своих классов и выяснить, что там происходит?
Тем временем, если вы просто тестируете, вы можете сделать что-то вроде этого:
дайте вашему текстуру id (с setId()
я думаю).
Получите текстовое представление, используя findViewById()
в своем классе mycount.
Используйте это, чтобы изменить текст.
или
Добавьте memeber в свой MyCount, который имеет параметр "textview", и назовите это с помощью своего исходного tv var.
nanne является правильным, просто удаляйте тип перед этой строкой tv = new TextView (this);
Однако это единственное изменение, которое нужно сделать, потому что ваш класс является внутренним классом этого действия, и вы определили tv как varibale для всей активности, которая включает в себя все методы и внутренние классы в нем.
С этим изменением этот код работает, я только что протестировал его.
Но если ваш файл MyCount находится в отдельном файле .java, вам необходимо передать это представление следующим образом:
MyCount counter = новый MyCount (5000,1000, tv);
end Класс 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);
}}