Android想加一个到零停止的语句,自己的尝试都错误,求解答
package com.example.time;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private EditText inputet;//输入时间
private Button getTime;//得到输入的时间
private Button startTime;//点击开始自动减少时间的按钮
private Button stopTime;//点击开始停止自动减少时间的按钮
private TextView time;//当前时间
private int i = 0;
private Timer timer = null;//计时器
private TimerTask timerTask = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initviews();//初始化视图
setOnclick();//设置视图的点击监听
}
private void setOnclick() {
getTime.setOnClickListener(this);
startTime.setOnClickListener(this);
stopTime.setOnClickListener(this);
}
private void initviews() {
inputet = (EditText) findViewById(R.id.inputtime);
getTime = (Button) findViewById(R.id.gettime);
startTime = (Button) findViewById(R.id.starttime);
stopTime = (Button) findViewById(R.id.stoptime);
time = (TextView) findViewById(R.id.time);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.gettime:
time.setText(inputet.getText().toString());//当前时间
i = Integer.parseInt(inputet.getText().toString());//当前输入时间
break;
case R.id.starttime://开始自动减时
startTime();
break;
case R.id.stoptime://停止自动减时
stopTime();
break;
}
}
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
time.setText(msg.arg1+"");
startTime();
if(time.equals(0))
timer.cancel();
timer = null;
};
};
/**
* 开始自动减时
*/
private void startTime() {
if(timer==null){
timer = new Timer();
}
timerTask = new TimerTask() {
@Override
public void run() {
i--;//自动减1
Message message = Message.obtain();
message.arg1=i;
mHandler.sendMessage(message);//发送消息
}
};
timer.schedule(timerTask, 1000);//1000ms执行一次
}
/**
* 停止自动减时
*/
private void stopTime() {
if(timer!=null)
timer.cancel();
timer = null;
}
}
你看看你的handleMessage里面写了startTime,你可以增加一个标识符,当你调用了timer.cancel,加个flag=true, 如果flag==true,handleMessage里面不要再调用startTime方法了。
还有time.cancel之后,也要调用一下handler.removeCallbackAndMessage(null) 移除全部消息
if(time.equals(0))
timer.cancel();
timer = null;
这块有问题 导致你每次timer都被重置了 if不加{}默认只执行下一行。