1

Button を拡張する EventButton というクラスがあります。

ボタンのすべての設定は、このクラス、onClick() などにあります。

スクロールビューを持つホームアクティビティもあります

ユーザーがメニュー ボタンを押すと、Home アクティビティのスクロール ビューに EventButtons が追加されます。new EventButton() を呼び出すだけのオブジェクトをインスタンス化しない

ユーザーがボタンをクリックすると、ダイアログが表示され、ユーザーは「イベント」の名前と「イベント」の時間を設定します。

名前と時刻は、ホーム アクティビティの scollview 内のそのボタンに表示されます。

私の質問は、設定された時間が経過したかどうかを確認するために、たとえば 5 分ごとに EventButton を更新するにはどうすればよいかということです。TimerTask と Timer 、および Handler も試しましたが、どちらも機能していないようです。TimerTask がクラッシュし続けました。android で Handler を使用する方がよいこともわかりました。

    private void scheduleDelay() {

    EventButton.this.postDelayed(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            int mHour = calendar.get(Calendar.HOUR_OF_DAY);
            int mMinute = calendar.get(Calendar.MINUTE);

            if(EventButton.hour < mHour || EventButton.minute < mMinute) {
                EventButton.this.setBackgroundColor(Color.RED);
            }
            EventButton.this.postDelayed(this, 5);
        }
    }, 5);
}

上記は、ユーザーが AlertDialog で EventButton の名前と時間を設定すると呼び出されます。

アップデート

結局、問題は Handler にあるようには見えません。クラッシュしているのは、時と分を取得しようとしたときのようです。

4

1 に答える 1

0

使用量を 5 ミリ秒ではなく 5 分 (5 * 60 * 1000) に変更します。

private void scheduleDelay() {

    EventButton.this.postDelayed(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            int mHour = calendar.get(Calendar.HOUR_OF_DAY);
            int mMinute = calendar.get(Calendar.MINUTE);

            if(EventButton.hour < mHour || EventButton.minute < mMinute) {
                EventButton.this.setBackgroundColor(Color.RED);
            } else {
                // wait another 5 minutes
                scheduleDelay();
            }

        }
    }, 300000);
}
于 2013-10-06T20:30:08.420 に答える