我正在尝试使用最近的时间并在TextView中显示它。并使用Timer和timerTask每秒获取当前时间并使用View对象的post方法更新UI。
以下是我的代码:
public class MainActivity extends Activity implements OnClickListener
{
Button btnStart,btnStop;
TextView txtRcntTime;
Calendar c;
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize(); // method where i initialized all components
c = Calendar.getInstance();
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonStart:
start();
break;
case R.id.buttonStop:
stop();
break;
}
}
public void stop()
{
if (timer!=null){
timer.cancel();
timer = null;
}
}
private void start()
{
if(timer != null)
{ timer.cancel(); }
TimerTask task = new TimerTask() {
@Override
public void run() {
SimpleDateFormat df1 = new SimpleDateFormat("hh-mm-ss a");
String formattedDate1 = df1.format(c.getTime());
updateView(formattedDate1);
}
};
timer = new Timer(true);
timer.schedule(task, 0, 1000);
}
public void updateView(final String t)
{
txtRcntTime.post(new Runnable() {
String t2 = t;
@Override
public void run()
{ txtRcntTime.setText(t2); }
});
}
}
结果显示第一次单击按钮但未更新时的时间。
答案 0 :(得分:2)
<强>问题:强>
c = Calendar.getInstance();
它实际上正在更新,但您只获得一个日历实例,因此每隔1秒调用一次计时器任务就会给您一个同样的时间。
<强>溶液强>
通过每秒获取一次实例来更新日历
TimerTask task = new TimerTask() {
@Override
public void run() {
SimpleDateFormat df1 = new SimpleDateFormat("hh-mm-ss a");
Calendar cal = Calendar.getInstance();
String formattedDate1 = df1.format(cal.getTime());
updateView(formattedDate1);
}
};