アプリに 2 つのボタンがあることを確認します。1 つは 30 秒のタイマーを開始し、もう 1 つは 60 秒のタイマーを開始します。タイマー起動も問題ありません。問題は、60 秒のボタンをクリックしてからすぐに 30 秒のボタンをクリックすると、テキストビューが 60 から 0 へのカウントダウンと 30 から 0 へのカウントダウンの間で切り替わるとします。59 28 57 26 などになります。知っておくべきことは、最初に 60 秒をクリックしてから 30 秒ボタンを押すと、60 秒のカウントダウンがキャンセルされ、30 秒のカウントダウンが開始されることです。
これが私のコードです。関連する部分のみを掲載しています。
[編集]コード全体を掲載しました。
package com.android.tapme;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TapMe extends Activity {
private int countValue = 0, psuedoCountValue = 0;
private TextView textView1;
private TextView textView2;
Button tapButton;
Button sixty_seconds;
Button thirty_seconds;
private boolean thirtyon=false, sixtyon=false;
boolean timeUp=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tap_me);
tapButton= (Button) findViewById(R.id.tapButton);
textView1 = (TextView) findViewById(R.id.textView1);
textView1.setTextSize(40);
textView2 = (TextView) findViewById(R.id.textView2);
textView2.setTextSize(20);
thirty_seconds = (Button) findViewById(R.id.thirty_seconds);
sixty_seconds= (Button) findViewById(R.id.sixty_seconds);
sixty_seconds.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
timeUp=false;
countValue=0;
sixtyon=true;
checkTapValue();
MyCount myCount=new MyCount(60000,1000);
if(thirtyon==true)
{
myCount.cancel();
}
myCount=new MyCount(60000,1000);
thirtyon=false;
myCount.start();
}
});
thirty_seconds.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
timeUp=false;
countValue=0;
thirtyon=true;
checkTapValue();
MyCount myCount=new MyCount(30000,1000);
if(sixtyon==true)
{
myCount.cancel();
}
myCount=new MyCount(30000,1000);
sixtyon=false;
myCount.start();
}
});
}
private void checkTapValue() {
tapButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(timeUp==false)
{
countValue++;
textView1.setText(Integer.toString(countValue));
}
else if(timeUp==true)
{
psuedoCountValue=countValue;
textView1.setText(Integer.toString(psuedoCountValue));
}
}
});
}
public void disable_Button()
{
timeUp=true;
psuedoCountValue=countValue;
}
class MyCount extends CountDownTimer {
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
disable_Button();
textView2.setText("Time's up!");
}
@Override
public void onTick(long millisUntilFinished) {
System.out.println(millisUntilFinished);
textView2.setText("" + (int) (millisUntilFinished / 1000));
}
}
}