0

Androidスタジオでは、CountDownTimer. ボタンを押すと10秒から0になり、ボタンをTextViewクリックした回数がカウントされます。別のボタンを押して、いつでもこのアクティビティを再開したい 再起動. 手伝って頂けますか?それが役立つ場合は、コードを配置します。

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

    txtCount = (TextView)findViewById(R.id.textView1);
    txtCount.setText(String.valueOf(count));
    btnCount = (Button)findViewById(R.id.button1);
    btnRestart = (Button)findViewById(button2);

    final boolean[] timerProcessing = {false};
    final boolean[] timerStarts = {false};

    final TextView textViewTimer = (TextView)findViewById(R.id.textView2);
    //Saving link to timer object
    final CountDownTimer timer = new CountDownTimer(10000, 1) {

        public void onTick(long millisUntilFinished) {
            textViewTimer.setText("" + millisUntilFinished / 1000
                    + ":" + millisUntilFinished % 1000);
                        }


        public void onFinish() {
            textViewTimer.setText("0:000");
            timerProcessing[0] = false;
        }

    };

    btnCount.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            //start timer once when button first click
            if (!timerStarts[0]){
                timer.start();
                timerStarts[0] = true;
                timerProcessing[0] = true;
            }

            if (timerProcessing[0]){
                count++;
                txtCount.setText(String.valueOf(count));
            }
        }
    });
    btnRestart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {  }
}
4

3 に答える 3

2

以下のコードを置き換えるだけです:

private TextView txtCount, textViewTimer;
private Button btnCount, btnRestart;
int count = 0;
boolean[] timerProcessing = { false };
boolean[] timerStarts = { false };
private MyCount timer;

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

    txtCount = (TextView) findViewById(R.id.textView1);
    txtCount.setText(String.valueOf(count));
    btnCount = (Button) findViewById(R.id.button1);
    btnRestart = (Button) findViewById(R.id.button2);

    textViewTimer = (TextView) findViewById(R.id.textView2);

    timer = new MyCount(10000, 1);

    btnCount.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            // start timer once when button first click
            if (!timerStarts[0]) {
                timer.start();
                timerStarts[0] = true;
                timerProcessing[0] = true;
            }

            if (timerProcessing[0]) {
                count++;
                txtCount.setText(String.valueOf(count));
            }
        }
    });
    btnRestart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            timerProcessing[0] = true;
            count = 0;
            txtCount.setText(String.valueOf(count));
            timer.cancel();
            timer.start();
        }
    });
}

public class MyCount extends CountDownTimer {
    public MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        textViewTimer.setText("0:000");
        timerProcessing[0] = false;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        textViewTimer.setText("" + millisUntilFinished / 1000 + ":"
                + millisUntilFinished % 1000);

    }
}

ここで、カウンター変数は内部クラスに置き換えられるため、毎回カウンター変数を作成する必要はありません。カウンターを再起動したい場合は、一度カウンター変数を作成し、その start メソッドを呼び出すだけです。

于 2013-10-17T08:07:37.677 に答える
1

をメソッドでラップしCountDownTimer、再起動ボタンをクリックしたときに再度呼び出します。

于 2013-10-17T02:32:56.930 に答える
0

アクティビティを再起動する必要があるのはなぜですか。ロジックが必要で、onclicklistener の再起動ボタンを処理する必要があります。

countdowntimer コードを関数に移動し、アクティビティ onCreate/onResume から、また再起動ボタンのクリックからこの関数を呼び出します。

于 2013-10-16T23:30:40.707 に答える