1

Androidアプリの作成を学び始めたばかりです。edittext から値を取得する単純なカウント ダウン タイマーを作成したかったのですが、カウント ダウン タイマーが実行されていないようです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    countDownTxt = (TextView) findViewById(R.id.countDownView);
    intervalTxt = (TextView) findViewById(R.id.intervalText);

    findViewById(R.id.startBN).setOnClickListener(
            new View.OnClickListener() {
                public void onClick(View v) {
                    int testInt = 30;
                    //countDownTxt.setText(intervalTxt.getText());
                    int interval = Integer.parseInt(intervalTxt.getText().toString());
                    Log.d("buttonpressed", "interval for countdown is " + interval);

                    cdt = new CountDownTimer(Integer.parseInt(intervalTxt.getText().toString()), 1000) {
                         public void onTick(long millisUntilFinished) {
                             Log.d("counttimer1", "haha1");
                             countDownTxt.setText(""+ millisUntilFinished / 1000);
                         }

                         public void onFinish() {
                             cancel();
                         }
                      }.start();
                }
            }
    );
}

特に、このプログラムは、CountDownTimer の第 1 パラメーター「cdt = new CountDownTimer(testInt, 1000)」に 30000 などの数値を入力した場合にのみ機能します。

誰か教えてください。ありがとうございました!

4

2 に答える 2

0

onTick() メソッドは別の Thread で呼び出されます。setText()ただし、GUI スレッドの外でメソッドを使用する権利はありません。Activity.postOnUiThread()GUI Thread で何かを実行するには、Handler オブジェクトまたはメソッドを使用する必要があります。

  cdt = new CountDownTimer(Integer.parseInt(intervalTxt.getText().toString()), 1000) {
                        public void onTick(long millisUntilFinished) {
                           Log.d("counttimer1", "haha1");
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                   countDownTxt.setText("" + millisUntilFinished / 1000);
                            }
                        });
                           countDownTxt.setText(""+ millisUntilFinished / 1000);
                        }

                        public void onFinish() {
                            cancel();
                        }
                     }.start();

詳細については、http://developer.android.com/guide/components/processes-and-threads.html#Threadsを参照してください。

于 2012-09-09T06:24:34.547 に答える
0

「うまくいかない」のはどうして?表示されたエラー メッセージまたは「動作しない」というその他の症状を投稿する必要があります。


おそらく起こっていることは、CountDownTimer がそのコンストラクターの最初のパラメーターとして long 値のみを受け入れることです。int 値ではありません。

に変更int testInt = 30してlong testLong = 10000.0f、何が起こるかを確認します。

ちなみに、最初のパラメーターはミリ秒を意味するため、「30」はそもそもあまり得られません。

于 2012-09-09T06:17:11.323 に答える