前提・実現したいこと
AndroidStudioでJavaを使用しアプリ開発をしています。
その中で、for文を使用し、入力された回数分2つのカウントダウンタイマーを
繰り返し交互に動かすという機能を作りたいのですが、うまくいきません。
AndroidStudioもJavaも初心者であり、ネットの知識を寄せ集めて
必死に何とか作成している為for文ではない他の部分が問題なのかもしれませんが、
一応該当するであろうコードを載せておきます。
発生している問題・エラーメッセージ
現在繰り返されているのが何回目かをその都度表示させるようにしているのですが、
いきなり最終回の回数が表示され、1度実行すると終了してしまいます。
(5回繰り返す場合はいきなり5と表示され1度実行すると終了される)
該当のソースコード
java
1package com.websarva.wings.android.timertest; 2 3import android.os.Bundle; 4import android.os.CountDownTimer; 5import android.view.View; 6import android.widget.Button; 7import android.view.View.OnClickListener; 8import android.widget.EditText; 9import android.widget.Toast; 10 11import androidx.appcompat.app.AppCompatActivity; 12 13 14public class MainActivity extends AppCompatActivity { 15 16 // アラート音 17 private SoundPlayer soundPlayer; 18 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 23 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 27 soundPlayer = new SoundPlayer(this); 28 29 final String START_MESSAGE = "START"; 30 final String STOP_MESSAGE = "STOP"; 31 final String FINISH_MESSAGE = "終了"; 32 final EditText editTime = findViewById(R.id.editTime); //活動時間 33 final EditText editTime2 = findViewById(R.id.editTime2); //インターバル 34 final EditText editTime3 = findViewById(R.id.editTime3); //セット数 35 final CountDownTimer[] cdt = new CountDownTimer[1]; //活動時間のカウントダウンタイマー 36 final CountDownTimer[] cdt2 = new CountDownTimer[1]; //インターバルのカウントダウンタイマー 37 38 39 Button StartButton = findViewById(R.id.StartButton); 40 Button StopButton = findViewById(R.id.StopButton); 41 42 43 44 StartButton.setOnClickListener(new View.OnClickListener() { 45 @Override 46 public void onClick (View v){ 47 48 49 // 始まりの合図 50 Toast toast1 = Toast.makeText(MainActivity.this, START_MESSAGE, Toast.LENGTH_SHORT); 51 toast1.show(); 52 53 54 // 入力時間取得 55 int inputTime = Integer.parseInt(String.valueOf(editTime.getText())); 56 int inputTime2 = Integer.parseInt(String.valueOf(editTime2.getText())); 57 int inputTime3 = Integer.parseInt(String.valueOf(editTime3.getText())); 58 59 60 //ここからセット数繰り返す 61 62 for (int i=1; i < inputTime3+1 ; i++) { 63 64 //残りのセット数を表示する 65 editTime3.setText(Long.toString(i)); 66 67 // 活動時間のカウントダウン 68 69 cdt[0] = new CountDownTimer(inputTime * 1000, 1000) { 70 @Override 71 public void onTick(long millisUntilFinished) { 72 editTime.setText(Long.toString(millisUntilFinished / 1000)); 73 } 74 75 @Override 76 public void onFinish() { 77 78 //終わりの合図 79 toast1.show(); 80 81 editTime.setText("0"); 82 //活動時間終わりのブザー音を鳴らす 83 soundPlayer.playendSound(); 84 85 //活動時間の元の秒数を表示する 86 editTime.setText(Long.toString(inputTime)); 87 88 89 //インターバル用のタイマーが作動する 90 cdt2[0] = new CountDownTimer(inputTime2 * 1000, 1000) { 91 @Override 92 public void onTick(long millisUntilFinished) { 93 editTime2.setText(Long.toString(millisUntilFinished / 1000)); 94 } 95 96 97 @Override 98 public void onFinish() { 99 100 //インターバルの終わりの合図 101 Toast toast2 = Toast.makeText(MainActivity.this, FINISH_MESSAGE, Toast.LENGTH_SHORT); 102 toast2.show(); 103 104 editTime2.setText("0"); 105 //インターバル終わりのブザー音を鳴らす 106 soundPlayer.playendSound(); 107 108 109 //インターバルの元の秒数を表示する 110 editTime2.setText(Long.toString(inputTime2)); 111 112 } 113 114 }.start(); 115 } 116 }.start(); 117 118 } 119 120 } 121 122 }); 123 124 125 StopButton.setOnClickListener(new OnClickListener() { 126 127 @Override 128 public void onClick (View v){ 129 130 // ストップ 131 Toast toast = Toast.makeText(MainActivity.this, STOP_MESSAGE, Toast.LENGTH_SHORT); 132 toast.show(); 133 134 // タイマー停止 135 cdt[0].cancel(); 136 cdt2[0].cancel(); 137 138 } 139 }); 140 141 } 142} 143 144
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー