我有一个RecyclerView,其中包含警报,其中包含直到下一次警报的日期,小时数。
我使用正在运行处理程序/ runnable的计时器任务来更新recyclerview sot上的视图,直到下一个警报是最新的。这很好用,每60秒更新一次RecyclerView。但是我希望它能够从分钟的变化开始,而不是在分钟之间的中途。
我在下面尝试过,它运行没有错误,但在一分钟内没有完全改变:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.SECOND, 0);
updateTimer.schedule(updater, startTime.getTime(), 60000);
这是代码的其余部分,以防万一:
// Timer task for updating the minutes on the alarms recyclerview
private class UpdateTask extends TimerTask {
Handler handler;
MainAlarmsFragment ref;
public UpdateTask (Handler handler, MainAlarmsFragment ref){
super();
this.handler = handler;
this.ref = ref;
}
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
ref.updateDisplay();
}
});
}
}
提前感谢您的帮助
答案 0 :(得分:1)
将您输入过去时间的分钟时间设置为0。
startTime.add(Calendar.MINUTE,1);
startTime.set(Calendar.SECOND, 0);
答案 1 :(得分:1)
试试这个:
super.onStart();
UpdateTask updater = new UpdateTask(new Handler(), this);
updateTimer.schedule(updater, 0, 60000L);// starts immediately
或改进任务计划使用此:
schTaskEx = Executors.newScheduledThreadPool(1);
schFuture = schTaskEx.scheduleAtFixedRate(rnb, 0,60000L, TimeUnit.MILLISECONDS);
其中rnb
是Runnable
接口的实例。
编辑
为了延迟使用60000L
代替0