以周期性方式更新小部件TextView的简单方法

时间:2013-03-10 00:36:40

标签: android android-widget widget textview

我有一个带有两个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分钟。感谢

3 个答案:

答案 0 :(得分:7)

您可以创建HandlerRunnable,然后让Handler按指定的时间间隔重新启动Runnable。你的程序可能如下所示:

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()调用。

答案 1 :(得分:1)

你必须使用AlarmManager,查看本教程了解详情:http://www.vogella.com/articles/AndroidWidgets/article.html#widget_update别忘了检查这部分:

<强> 8。教程:通过服务更新小部件

答案 2 :(得分:1)

另一种可能性是使用TimerTimerTask类。 您可以使用Timer.schedule(TimerTask task, long delay, long period)方法来完成您的需要。

请记住,您无法从TimerTask中访问UI线程 - 因此,如果您已打算将Handler.postDelayed()Handler一起使用,那么Timer方法可能是更好的选择类。 用于访问带有TimerTask的UI线程的其他方法,例如Activity.runOnUiThread()