アクティビティでCountDownTimerを正しく設定する方法

ハンズ・フーシェ

助けてください、私は一時停止して再開する必要があるメソッド内にカウントダウンタイマーがあります。onPauseで.cancel()を使用してタイマーを一時停止できましたが、正しく再起動できません。2つのシナリオがあります。シナリオ1-一時停止しますが、再起動すると、最初のタイマーがキャンセルされた場合でも、両方のカウントダウンタイマーが再起動するようです。

    public void playAgain (View view) {

        score = 0;
        numberOfQuestions = 0;
        timerTextView.setText("60s");
        pointsTextView.setText("0/0");
        resultTextView.setText("");
        playAgainButton.setVisibility(View.INVISIBLE);
        returnToMenu.setVisibility(View.INVISIBLE);
        resultDisplayTextView.setVisibility(View.INVISIBLE);
        countDownText.setVisibility(View.VISIBLE);
        button0.setVisibility(View.INVISIBLE);
        button1.setVisibility(View.INVISIBLE);
        button2.setVisibility(View.INVISIBLE);
        button3.setVisibility(View.INVISIBLE);
        sumTextView.setVisibility(View.INVISIBLE);

            countDownTimer = new CountDownTimer(millisInFuture, countDownInterval) {
                @Override
                public void onTick(long timeRemain) {

                    millisInFuture = timeRemain;

                    countDownText.setText(String.valueOf(timeRemain / 1000 - 60));

                    if (timeRemain <= 61000) {

                        timerTextView.setText(String.valueOf(timeRemain / 1000) + "s");
                        button0.setEnabled(true);
                        button1.setEnabled(true);
                        button2.setEnabled(true);
                        button3.setEnabled(true);
                        button0.setVisibility(View.VISIBLE);
                        button1.setVisibility(View.VISIBLE);
                        button2.setVisibility(View.VISIBLE);
                        button3.setVisibility(View.VISIBLE);
                        sumTextView.setVisibility(View.VISIBLE);
                        countDownText.setVisibility(View.INVISIBLE);
                    }

                }


                @Override
                public void onFinish() {

                    timerTextView.setText("0s");



                    if (score > 0) {
                        percentage = score * 100 / numberOfQuestions;
                    } else {
                        percentage = 0;
                    }

                    button0.setEnabled(false);
                    button1.setEnabled(false);
                    button2.setEnabled(false);
                    button3.setEnabled(false);
                    playAgainButton.setVisibility(View.VISIBLE);
                    returnToMenu.setVisibility(View.VISIBLE);
                    resultDisplayTextView.setVisibility(View.VISIBLE);
                    resultTextView.setText(" ");
    }
            }.start();

        generateQuestion();

    }


 @Override
    public void onPause() {

        countDownTimer.cancel();

        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
CountDownTimer countDownTimer1 = new CountDownTimer(millisInFuture, countDownInterval) {
            @Override
            public void onTick(long timeRemain) {

                millisInFuture = timeRemain;

                countDownText.setText(String.valueOf(timeRemain / 1000 - 60));

                if (timeRemain <= 61000) {

                    timerTextView.setText(String.valueOf(timeRemain / 1000) + "s");
                    button0.setEnabled(true);
                    button1.setEnabled(true);
                    button2.setEnabled(true);
                    button3.setEnabled(true);
                    button0.setVisibility(View.VISIBLE);
                    button1.setVisibility(View.VISIBLE);
                    button2.setVisibility(View.VISIBLE);
                    button3.setVisibility(View.VISIBLE);
                    sumTextView.setVisibility(View.VISIBLE);
                    countDownText.setVisibility(View.INVISIBLE);
                }

            }


            @Override
            public void onFinish() {

                timerTextView.setText("0s");



                if (score > 0) {
                    percentage = score * 100 / numberOfQuestions;
                } else {
                    percentage = 0;
                }

                button0.setEnabled(false);
                button1.setEnabled(false);
                button2.setEnabled(false);
                button3.setEnabled(false);
                playAgainButton.setVisibility(View.VISIBLE);
                returnToMenu.setVisibility(View.VISIBLE);
                resultDisplayTextView.setVisibility(View.VISIBLE);
                resultTextView.setText(" ");
}
        }.start();
}

2番目のシナリオは、システムをクラッシュさせるだけです。

    public void playAgain (View view) {

        score = 0;
        numberOfQuestions = 0;
        timerTextView.setText("60s");
        pointsTextView.setText("0/0");
        resultTextView.setText("");
        playAgainButton.setVisibility(View.INVISIBLE);
        returnToMenu.setVisibility(View.INVISIBLE);
        resultDisplayTextView.setVisibility(View.INVISIBLE);
        countDownText.setVisibility(View.VISIBLE);
        button0.setVisibility(View.INVISIBLE);
        button1.setVisibility(View.INVISIBLE);
        button2.setVisibility(View.INVISIBLE);
        button3.setVisibility(View.INVISIBLE);
        sumTextView.setVisibility(View.INVISIBLE);

            countDownTimer = new CountDownTimer(millisInFuture, countDownInterval) {
                @Override
                public void onTick(long timeRemain) {

                    millisInFuture = timeRemain;

                    countDownText.setText(String.valueOf(timeRemain / 1000 - 60));

                    if (timeRemain <= 61000) {

                        timerTextView.setText(String.valueOf(timeRemain / 1000) + "s");
                        button0.setEnabled(true);
                        button1.setEnabled(true);
                        button2.setEnabled(true);
                        button3.setEnabled(true);
                        button0.setVisibility(View.VISIBLE);
                        button1.setVisibility(View.VISIBLE);
                        button2.setVisibility(View.VISIBLE);
                        button3.setVisibility(View.VISIBLE);
                        sumTextView.setVisibility(View.VISIBLE);
                        countDownText.setVisibility(View.INVISIBLE);
                    }

                }


                @Override
                public void onFinish() {

                    timerTextView.setText("0s");



                    if (score > 0) {
                        percentage = score * 100 / numberOfQuestions;
                    } else {
                        percentage = 0;
                    }

                    button0.setEnabled(false);
                    button1.setEnabled(false);
                    button2.setEnabled(false);
                    button3.setEnabled(false);
                    playAgainButton.setVisibility(View.VISIBLE);
                    returnToMenu.setVisibility(View.VISIBLE);
                    resultDisplayTextView.setVisibility(View.VISIBLE);
                    resultTextView.setText(" ");
    }
            }.start();

        generateQuestion();

    }


 @Override
    public void onPause() {

        countDownTimer.cancel();

        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
countDownTimer.start();
}

私はグーグルで検索しましたが、実用的な解決策が見つからないようです。この機能が機能しない限り、Galaxyストアは私のapkのアップロードを拒否します。

privatestaticint

重要なのは、CountDownTimerは比較的限定されたクラスです。それだけで2つのメソッドがあり、start()かつcancel()、二コールバック、onTick()およびonFinish()一時停止/再開機能は組み込まれていません。

CountDownTimerの動作を視覚化するために、TextViewを使用して非常に基本的なアクティビティを設定しました。これは、アクティビティを終了するときに一時停止し、戻るときに再開するなど、希望どおりに機能します。ここに簡単なコードを投稿しました:

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;
    private CountDownTimer mCountDownTimer;

    private static final long INTERVAL = 1000L;
    private long timeRemaining = 60000L;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView)findViewById(R.id.text_view);
    }

    @Override
    protected void onResume() {
        super.onResume();

        mCountDownTimer = new CountDownTimer(timeRemaining, INTERVAL) {
            @Override
            public void onTick(long l) {
                mTextView.setText(String.format(Locale.getDefault(), "%d sec.", l / 1000L));
                timeRemaining = l;
            }

            @Override
            public void onFinish() {
                mTextView.setText("Done.");
            }
        };
        mCountDownTimer.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mCountDownTimer.cancel();
    }
}

このコードを実行できるかどうかを確認することから始め、次に基本的なアイデアをプロジェクトに統合します。基本的に、CountDownTimerオブジェクトの外部に残っている時間を維持する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

設定アクティビティを正しく設定するにはどうすればよいですか?

分類Dev

CustomBroadcastReceiverクラスではなく、アクティビティでTextView可視性を設定する方法は?

分類Dev

ボットアクティビティを設定する方法

分類Dev

別のアクティビティでTextをTextViewに設定する方法

分類Dev

他のアクティビティでsharedPreferencesの値を設定する方法は?

分類Dev

Android6.0で透過的なアクティビティを設定する方法

分類Dev

2番目のアクティビティでonBackPressedを設定する方法

分類Dev

Androidで1つのアクティビティにActionBarを設定する方法

分類Dev

アクティビティを正しく再開する

分類Dev

アクティビティ属性「android:windowIsFloating」をtrueに設定すると、AndroidConstraintLayoutの幅が正しくありませんでした

分類Dev

SpringのCASサービスプロパティでサービスURLを正しく設定する方法

分類Dev

アクティビティを設定画面の設定に保持する方法

分類Dev

アクティビティなしで別のクラスから共有設定を取得する方法ANDROID

分類Dev

アクティビティ図。複数の選択を定義する正しい方法ですか?

分類Dev

TFSビルドでAssociateChangesアクティビティの「PreviousBuild」プロパティを設定する方法

分類Dev

特定のアクティビティに対してAndroidManifestでSupportRTLを設定する方法

分類Dev

「設定アクティビティ」で、メインアクティビティを別のアクティビティに変更します

分類Dev

設定アクティビティを起動するときのAndroid9の戻るボタンが正しく機能しない

分類Dev

設定アクティビティを起動するときのAndroid9の戻るボタンが正しく機能しない

分類Dev

設定アクティビティ上部の矢印を使用して戻る方法

分類Dev

呼び出し元のアクティビティからPagerAdapterでアイテム数を設定する

分類Dev

Androidアプリで特定のアクティビティへの動的リンクを設定する方法

分類Dev

設定アクティビティからonBackPressedを管理する方法は?

分類Dev

メインアクティビティと新しいアクティビティの間に遅延を設定する方法

分類Dev

Android、新しいルートアクティビティを設定する

分類Dev

別のアクティビティで共有設定を取得する

分類Dev

LollipopでAPN設定アクティビティを起動する

分類Dev

通知設定アクティビティをシステム設定に追加する方法

分類Dev

Android:戻るボタンでアクティビティの設定を開始する方法

Related 関連記事

  1. 1

    設定アクティビティを正しく設定するにはどうすればよいですか?

  2. 2

    CustomBroadcastReceiverクラスではなく、アクティビティでTextView可視性を設定する方法は?

  3. 3

    ボットアクティビティを設定する方法

  4. 4

    別のアクティビティでTextをTextViewに設定する方法

  5. 5

    他のアクティビティでsharedPreferencesの値を設定する方法は?

  6. 6

    Android6.0で透過的なアクティビティを設定する方法

  7. 7

    2番目のアクティビティでonBackPressedを設定する方法

  8. 8

    Androidで1つのアクティビティにActionBarを設定する方法

  9. 9

    アクティビティを正しく再開する

  10. 10

    アクティビティ属性「android:windowIsFloating」をtrueに設定すると、AndroidConstraintLayoutの幅が正しくありませんでした

  11. 11

    SpringのCASサービスプロパティでサービスURLを正しく設定する方法

  12. 12

    アクティビティを設定画面の設定に保持する方法

  13. 13

    アクティビティなしで別のクラスから共有設定を取得する方法ANDROID

  14. 14

    アクティビティ図。複数の選択を定義する正しい方法ですか?

  15. 15

    TFSビルドでAssociateChangesアクティビティの「PreviousBuild」プロパティを設定する方法

  16. 16

    特定のアクティビティに対してAndroidManifestでSupportRTLを設定する方法

  17. 17

    「設定アクティビティ」で、メインアクティビティを別のアクティビティに変更します

  18. 18

    設定アクティビティを起動するときのAndroid9の戻るボタンが正しく機能しない

  19. 19

    設定アクティビティを起動するときのAndroid9の戻るボタンが正しく機能しない

  20. 20

    設定アクティビティ上部の矢印を使用して戻る方法

  21. 21

    呼び出し元のアクティビティからPagerAdapterでアイテム数を設定する

  22. 22

    Androidアプリで特定のアクティビティへの動的リンクを設定する方法

  23. 23

    設定アクティビティからonBackPressedを管理する方法は?

  24. 24

    メインアクティビティと新しいアクティビティの間に遅延を設定する方法

  25. 25

    Android、新しいルートアクティビティを設定する

  26. 26

    別のアクティビティで共有設定を取得する

  27. 27

    LollipopでAPN設定アクティビティを起動する

  28. 28

    通知設定アクティビティをシステム設定に追加する方法

  29. 29

    Android:戻るボタンでアクティビティの設定を開始する方法

ホットタグ

アーカイブ