0

最初の問題:
4 つのカウントダウン (異なる値から開始) があり、それらの横にあるイメージビューをクリックすると開始されます。しかし、問題は、最初の画像をクリックすると、4 つのカウントダウンがすべて開始されることです。2 番目の画像をクリックすると、2 番目、3 番目、4 番目のカウントダウンが始まります。
スイッチのケースで何か間違ったことをしたと思いますが、エラーは表示されず、間違いを見つけることができません。

2 番目の問題:
[新しいゲーム] ボタンをクリックすると、すべてのタイマーが停止して 0 になるはずですが、タイマーをクリックすると再び開始され、古い残り時間と新しい残り時間が表示されます。
コード:

public class TimerActivity extends Activity implements
    android.view.View.OnClickListener {
private CountDownTimer countDownTimer;
private Button button_new_fight;
public TextView textviewRed;
public TextView textviewBlue;
public TextView textviewDragon;
public TextView textviewBaron;
public TextView tv;
public ImageView imageviewRed;
public ImageView imageviewBlue;
public ImageView imageviewDragon;
public ImageView imageviewBaron;
private boolean timerRedStarted;
private boolean timerBlueStarted;
private boolean timerDragonStarted;
private boolean timerBaronStarted;
private final long startTimeRed = 300000;
private final long startTimeBlue = 300000;
private final long startTimeDragon = 360000;
private final long startTimeBaron = 420000;
private final long interval = 1000;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.timer_layout);
    //binding content to these attributes to work with them
    button_new_fight = (Button) this.findViewById(R.id.button1);
    button_new_fight.setOnClickListener(this);
    textviewRed = (TextView) this.findViewById(R.id.textViewRedTime);
    textviewBlue = (TextView) this.findViewById(R.id.TextViewBlueTimeLeft);
    textviewDragon = (TextView) this.findViewById(R.id.TextViewDragonTimeLeft);
    textviewBaron = (TextView) this.findViewById(R.id.TextViewBaronTimeLeft);

    //binding this.imageviews to those of timer_layout.xml
    imageviewRed = (ImageView) this.findViewById(R.id.imageView1);
    imageviewRed.setOnClickListener(this);
    imageviewBlue = (ImageView) this.findViewById(R.id.imageView2);
    imageviewBlue.setOnClickListener(this);
    imageviewDragon = (ImageView) this.findViewById(R.id.imageView3);
    imageviewDragon.setOnClickListener(this);
    imageviewBaron = (ImageView) this.findViewById(R.id.imageView4);
    imageviewBaron.setOnClickListener(this);

}

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.button1:
        // clear all timers
        if (countDownTimer != null) {
            countDownTimer.cancel();
            countDownTimer = null;
        }
        // start timer red
    case R.id.imageView1:
        if (timerRedStarted == false) {
            countDownTimer = new MyCount(startTimeRed, interval,
                    textviewRed);
            textviewRed.setText(textviewRed.getText()
                    + String.valueOf(startTimeRed));
            countDownTimer.start();
        }
        // start timer blue
    case R.id.imageView2:
        if (timerBlueStarted == false) {
            countDownTimer = new MyCount(startTimeBlue, interval,
                    textviewBlue);
            countDownTimer.start();
        }
        // start timer dragon
    case R.id.imageView3:
        if (timerDragonStarted == false) {
            countDownTimer = new MyCount(startTimeDragon, interval,
                    textviewDragon);
            countDownTimer.start();
        }
        // start timer baron
    case R.id.imageView4:
        if (timerBaronStarted == false) {
            countDownTimer = new MyCount(startTimeBaron, interval,
                    textviewBaron);
            countDownTimer.start();
        }
    }
}

}

クラス MyCount は CountDownTimer を拡張します {

private TextView tv;

public MyCount(long millisInFuture, long countDownInterval, TextView tv) {
    super(millisInFuture, countDownInterval);
    this.tv = tv;
}

@Override
public void onTick(long millisUntilFinished) {
    tv.setText("" + millisUntilFinished / 1000);
}
4

1 に答える 1

0

最初の問題: 4 つのカウントダウン (異なる値から開始) があり、それらの横にあるイメージビューをクリックすると開始されます。しかし、問題は、最初の画像をクリックすると、4 つのカウントダウンがすべて開始されることです。2 番目の画像をクリックすると、2 番目、3 番目、4 番目のカウントダウンが始まります。スイッチのケースで何か間違ったことをしたと思いますが、エラーは表示されず、間違いを見つけることができません。

break;ステートメントを入れる必要があります。そうしないとswitch/case、すべてが実行されます

switch (v.getId()) {
case R.id.button1:
    // clear all timers
    if (countDownTimer != null) {
        countDownTimer.cancel();
        countDownTimer = null;
    }
    // start timer red
break;                  // <-- break statements
case R.id.imageView1:
    if (timerRedStarted == false) {
        countDownTimer = new MyCount(startTimeRed, interval,
                textviewRed);
        textviewRed.setText(textviewRed.getText()
                + String.valueOf(startTimeRed));
        countDownTimer.start();
    }
    // start timer blue
break;
case R.id.imageView2:
    if (timerBlueStarted == false) {
        countDownTimer = new MyCount(startTimeBlue, interval,
                textviewBlue);
        countDownTimer.start();
    }
break;

2 番目の問題: [新しいゲーム] ボタンをクリックすると、すべてのタイマーが停止して 0 になるはずですが、タイマーをクリックすると再び開始され、古い残り時間と新しい残り時間が表示されます。

最初の問題を修正すると、この問題も修正される場合があります。また、タイマー変数を再初期化する必要がある場合があります

于 2013-05-24T13:32:25.180 に答える