如何在Android中交替实现两个倒计时
我已经实现了一个计数器和第一个计数器的onFinish(),我启动了第二个计数器,但第一个计数器无法完成。文本“Bye Guyz”保留了一段时间,因此如何完成文本 请帮帮我 提前谢谢 代码:-如何在Android中交替实现两个倒计时,android,countdowntimer,Android,Countdowntimer,我已经实现了一个计数器和第一个计数器的onFinish(),我启动了第二个计数器,但第一个计数器无法完成。文本“Bye Guyz”保留了一段时间,因此如何完成文本 请帮帮我 提前谢谢 代码:- counter= new CountDownTimer(10000, 1000) { public void onTick(long millisUntilFinished) { if (count == 0) {
counter= new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
if (count == 0) {
tv.setText("First counter");
tv2.setVisibility(View.VISIBLE);
tv2.setText("Hello Guyz");
}
}
public void onFinish() {
if(!flag) {
tv2.setText("Bye Guyz");
count = 0;
try {
counter.cancel();
}catch (Exception e){}
}
else if(flag) {
counter1 = new CountDownTimer(9000, 1000) {
public void onTick(long millisUntilFinished) {
flag = false;
tv.setText("Second counter");
tv2.setVisibility(View.VISIBLE);
tv2.setText("Hello Girls");
count = 0;
}
public void onFinish() {
tv2.setVisibility(View.VISIBLE);
tv2.setText("Bye Girls");
count = 0;
}
}.start();
- 您是否“调试”代码以确保代码到达
counter1=新的倒计时(9000,1000)
- 您确定第一个
到达计数器
时onFinish()
变量为真吗标志
- 当计数器显然已经结束时,为什么要调用
中的onFinish()
counter.cancel()
public void onFinish(){
如果(!标志){
tv2.setText(“再见”);
计数=0;
试一试{
counter.cancel();
}捕获(例外e){}
}
如果您说您的tv2显示“Bye Guyz”,这意味着您的标志设置为false,因此“else If”部分不会执行。onFinish()只执行一次,因此您需要确保标志设置为true以启动第二个计数器
另外,您不应该取消onFinish()中的计数器,因为它已经完成。以下是我的选择 创建自定义
计数器
扩展线程
class Counter extends Thread {
private long timeOne, timeTwo;
private OnCounterFinishedListener mCounterFinishedListener;
private Thread t;
Activity activity = null;
Counter(Context context){
t = new Thread(this);
activity = (Activity)context;
}
@Override
public void run() {
try {
sleep(timeOne);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
mCounterFinishedListener.firstCounterFinished();
}
});
sleep(timeTwo);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
mCounterFinishedListener.secondCounterFinished();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
void setTimes(long timeOne, long timeTwo){
this.timeOne = timeOne;
this.timeTwo = timeTwo;
}
public void start(OnCounterFinishedListener listener){
mCounterFinishedListener = listener;
t.start();
}
interface OnCounterFinishedListener{
void firstCounterFinished();
void secondCounterFinished();
}
}
然后,在主线程内,您可以按如下方式启动此计数器
final Counter counter = new Counter(this);
counter.setTimes(5000, 5000);
counter.start(new Counter.OnCounterFinishedListener() {
@Override
public void firstCounterFinished() {
// Update your first TextView
}
@Override
public void secondCounterFinished() {
// Update your second TextView
}
});
代码已完成?如果(标志)未关闭,
else。某个变量使我无法确定,计数器和标志从何而来?