CountDownTimerについて質問があります。ボタンをクリックするたびに、ユーザーが時間を+1できるアプリケーションを作成する必要があります。次に、ボタンのクリックが停止した後、3秒間待機してから、カウントダウンを開始します。
以下にコードを貼り付けました。
私の問題は次のとおりです。数値のインクリメントが正しく機能していないようですが、数値のインクリメント(onStop())を停止すると、直接(onFinish())に移動するようです。OnTick()に移動して、毎秒1ずつ数を減らす代わりに。私はこれを修正するために多くの方法を試しましたが、行き詰まりました。
誰かが私を正しい方向に導くことができますか?どんな助けでもいただければ幸いです。君たちありがとう!
@SuppressWarnings("unused")
public class MainActivity extends Activity {
public int countdown;
Button stoptime;
public TextView timedisplay;
public Timer wavetimer;
private long millisInFuture;
private long countDownInterval;
private long onclicktime;
private long finished;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countdown = 01;
stoptime = (Button) findViewById(R.id.button2);
stoptime.setText("Stop Timer");
timedisplay = (TextView) findViewById(R.id.mycounter);
timedisplay.setText("0");
wavetimer = new Timer (millisInFuture, 1000);
finished = 0;
stoptime.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
wavetimer.onStop();
//try{
// Thread.sleep(3000);
// wavetimer.start();
//} catch (InterruptedException e) {
// e.printStackTrace();
// }
//wavetimer.onTick(millisInFuture);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public class Timer extends CountDownTimer {
public long millisInFuture;
private long countDownInterval = 1000;
private long currentelapsed;
private long methodlimit;
private long lapsedperiod;
public Timer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void onFinish() {
if (millisInFuture == 0){
timedisplay.setText("Countdown Finished");
} else {
timedisplay.setText("error");
}
}
public void onStop() {
wavetimer.cancel();
millisInFuture = millisInFuture + 1;
timedisplay.setText("Time Left: " + millisInFuture);
}
public void onTick(long millisUntilFinished) {
millisInFuture = (millisInFuture - 1);
timedisplay.setText("Time Left: " + millisInFuture / 1000);
}
}
}