0

Android で自動更新デジタル時計を実装する最も簡単なソリューションを探しています。私はすでにデジタル時計クラスがあることを知っています: http://developer.android.com/reference/android/widget/DigitalClock.html はい、それも非推奨です。API 17 から、TextClock を使用するようになりました。とにかく、学習のために、hh:mm:ss を表示する独自のカスタム時計を作成し、もちろんそれ自体を更新する必要があります。

これまでのところ、テキストビュー (デジタル時計が表示される場所) を参照し、Calendar クラスのインスタンスを取得し、分、時間、秒をインスタンス変数に署名します。

Calendar cal = Calendar.getInstance();
            hour = cal.get(Calendar.HOUR_OF_DAY);
            min = cal.get(Calendar.MINUTE);
            sec = cal.get(Calendar.SECOND);
                clock.setText(hour+":"+min+":"+sec);

このコードを実行すると、正確な時間がエミュレーターに表示されますが、明らかに更新されていません。何をしなければならないので、私のコードは「ループ」して時計を更新しますか?

私はすでにこの素敵な答えをチェックしました: Android: TextView で更新クロックを表示するにはどうすればよいですか?しかし、私の質問は: Android でデジタル時計の最も簡単なソリューションが欲しい =) それでもハンドラーを使用する必要がありますか?

4

2 に答える 2

3

Handlerを使用することはそれほど難しくありません。考えられる実装の1つは次のとおりです(注:リークするかどうかは確認していません):

final Handler h = new Handler();
h.post(new Runnable() {
    @Override
    public void run() {
        updateTime();
        h.postDelayed(this, 1000);
    }
});

Handler を使用したくない場合は、CountDownTimerを にmillisInFuture設定して使用することもできますLong.MAX_VALUE。しかし、これは本当にハックであり、Android の実装が整数オーバーフローを正しく処理できるかどうかはわかりません。

于 2012-11-21T18:05:08.467 に答える
0

メイン(UI)スレッドで「ループ」することはできないため、UIを頻繁に「更新」するには、別のメカニズムを使用する必要があります。ハンドラー、TimerTask、スレッド、または将来何かが起こるようにスケジュールできるその他のメカニズムを使用できます。

于 2012-11-21T18:03:10.533 に答える