2

時刻と日付を示す 2 つの TextView を持つウィジェットがあります。

このコードのバッチを毎秒発生させたいだけです。

views.setOnClickPendingIntent(R.id.rl, pendingIntent);
java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "kk:mm";
String date = "dd MMMMM yyyy";

views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));
views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));

したがって、ウィジェットで TextView を定期的に更新する簡単な方法が必要なので、時間が標準の 30 分よりも長く変化します。ありがとう

4

3 に答える 3

7

と を作成Handlerし、指定した間隔でを再起動Runnableさせることができます。プログラムは次のようになります。HandlerRunnable

private Handler mHandler = new Handler();

@Override
public void onResume() {
    super.onResume();
    mHandler.removeCallbacks(mUpdateClockTask);
    mHandler.postDelayed(mUpdateCLockTask, 100);
}

@Override
public void onPause() {
    super.onPause();
    mHandler.removeCallbacks(mUpdateClockTask);
}

private Runnable mUpdateClockTask = new Runnable() {
    public void run() {
        updateClock();
        mHandler.postDelayed(mUpdateClockTask, 1000);
    }
};

内部updateClock()ですべての UI の更新を行います。これはすべてActivity、適切なonPause()/onResume()呼び出しで内部で発生すると思います。

于 2013-03-10T01:33:54.343 に答える
1

詳細については、このチュートリアルを確認してください: http://www.vogella.com/articles/AndroidWidgets/article.html#widget_update この部分を確認することを忘れないでください:

8. チュートリアル: サービス経由でウィジェットを更新する

于 2013-03-10T00:39:27.053 に答える
1

もう 1 つの可能性は、TimerクラスとTimerTaskクラスを使用することです。メソッドを使用して、Timer.schedule(TimerTask task, long delay, long period)必要なことを達成できます。

TimerTask 内からは UI スレッドにアクセスできないことに注意してください。そのためHandler.postDelayed()、既にクラスで を使用する予定がある場合は、このメソッドを使用することをお勧めしHandlerますTimer。など、を使用して UI スレッドにアクセスする方法他にもあります。TimerTaskActivity.runOnUiThread()

于 2013-03-10T00:40:30.473 に答える