質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

1940閲覧

タイマーアプリで時間を選べるようにしたい

dekinai_chan

総合スコア4

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/01/23 09:16

編集2020/01/23 15:01

前提・実現したいこと

android studioでjavaで5分、10分、15分から時間を選べるカウントダウンタイマーのアプリを作成してるのですが、「5分」「10分」「15分」ボタンを押すとその時間がセットされるような動きをさせることができません。
ボタンを押したときの発生するイベントに時間がセットされるように書きましたが、エラーが出てしまい動きませんでした。
どうすればよいでしょうか?
作りかけなので汚い文章になってるかもしれません。

発生している問題・エラーメッセージ

該当のソースコード

package com.example.timer; //AndroidX import androidx.appcompat.app.AppCompatActivity; //import android.support.v7.app.AppCompatActivity; import android.os.CountDownTimer; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Locale; public class MainActivity extends AppCompatActivity { private TextView timerText; long countNumber = 300000; // インターバル msec long interval = 10; final CountDown countDown = new CountDown(countNumber, interval); class CountDown extends CountDownTimer { CountDown(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { // 完了 timerText.setText(dataFormat.format(0)); } // インターバルで呼ばれる @Override public void onTick(long millisUntilFinished) { // 残り時間を分、秒、ミリ秒に分割 //long mm = millisUntilFinished / 1000 / 60; //long ss = millisUntilFinished / 1000 % 60; //long ms = millisUntilFinished - ss * 1000 - mm * 1000 * 60; //timerText.setText(String.format("%1$02d:%2$02d.%3$03d", mm, ss, ms)); timerText.setText(dataFormat.format(millisUntilFinished)); } } private SimpleDateFormat dataFormat = new SimpleDateFormat("mm:ss.SSS", Locale.US); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button startButton = findViewById(R.id.start_button); Button stopButton = findViewById(R.id.stop_button); Button fiveButton = findViewById(R.id.five_button); Button tenButton = findViewById(R.id.ten_button); Button fifteenButton = findViewById(R.id.fifteen_button); Button resetButton = findViewById(R.id.reset_button); timerText = findViewById(R.id.timer); timerText.setText(dataFormat.format(0)); tenButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { long countNumber = 600000; // インターバル msec long interval = 10; } }); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 開始 countDown.start(); } }); stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 中止 countDown.cancel(); } }); resetButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 中止 countDown.cancel(); timerText.setText(dataFormat.format(0)); } }); } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/01/23 12:17

> ボタンを押したときの発生するイベントに時間がセットされるように書きましたが、エラーが出てしまい動きませんでした どのようなエラーが出たのか, ご質問を編集して追記して頂けますか.
dekinai_chan

2020/01/23 15:04

ごめんなさい、前回はエラーが出たのですがなにかを改変したのがきっかけでビルドには成功しました。 初期値に5分と設定されていているのですが、表記の仕方がわからず10分のボタンを押しても変わらず5分のカウントしかされません。
jimbe

2020/01/23 16:41

> ビルドには成功しました であれば, そうご質問を修正して頂けますか. でなければ, エラーによって動作していないのかと思ってしまいます. > ~5分のカウントしかされません こちらに関しても同様に, ご質問の修正をお願いできますか.
guest

回答1

0

tenButton の onClick のコードは, パラメータとなる変数に値を設定しているだけで, 何の意味もありません.

java

1 public void onClick(View v) { 2 long countNumber = 600000; 3 // インターバル msec 4 long interval = 10; 5 }

カウントダウンしているのは countDown に設定したオブジェクトのはずです.
宣言の final を取り, tenButton の onClick では追加で新たな CountDown オブジェクトを設定しては如何でしょうか.

java

1/*final*/ CountDown countDown = new CountDown(countNumber, interval);

java

1tenButton.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 long countNumber = 600000; 5 // インターバル msec 6 long interval = 10; 7 8 countDown = new CountDown(countNumber, interval); //追加 9 } 10});

というよりもパラメータとなる変数はこの際不要かもしれません.

java

1tenButton.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 countDown = new CountDown(600000, 10); //[ms]. 5 } 6});

設定した時間数を(カウントダウンを開始する前に)確認できるように, CountDown のコンストラクタで textTimer に時間を表示しては如何でしょうか.

java

1 CountDown(long millisInFuture, long countDownInterval) { 2 super(millisInFuture, countDownInterval); 3 timerText.setText(dataFormat.format(millisInFuture)); //追加 4 }

投稿2020/01/23 16:54

編集2020/01/23 17:01
jimbe

総合スコア12623

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問