我需要每隔5秒刷新一次TextViews,我已经创建了TimerTask(并在contrsuctor中设置了Activity like参数),但是我得到的错误是我只能从创建它们的线程访问小部件。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.system_data_show);
currentActivity = this;
Timer timer = new Timer();
timer.schedule(new SystemTimerTask(currentActivity),500, 5000);
///////////////// text views from layout /////////////////////////////////////////////
TextView txtCapture = (TextView) this.findViewById(R.id.txtCapture);
txtCapture.setText("System Data");
TextView txtWorkAllowedValue=(TextView)this.findViewById(R.id.workAllowedValue);
TextView txtBusBroken0Value=(TextView)this.findViewById(R.id.busBroken0Value);
TextView txtBusBroken1Value=(TextView)this.findViewById(R.id.busBroken1Value);
TextView txtShortCircuit0Value=(TextView)this.findViewById(R.id.shortCircuit0Value);
TextView txtShortCircuit1Value=(TextView)this.findViewById(R.id.shortCircuit1Value);
TextView txtErrorConfigurationValue=(TextView)this.findViewById(R.id.errorConfigurationValue);
}
如何每5秒刷新一次textViews?有没有办法不扩展TimerTask,也许o实现一些接口(我不知道哪个)所以我的SActivity扩展Activity实现了那个接口?
答案 0 :(得分:1)
您可以使用Handler
及其postDelayed()
功能。这样,您不需要仅为计时目的创建单独的线程。有关示例,请参阅:Repeat a task with a time delay?
答案 1 :(得分:1)
您可以使用Activity.runOnUiThread(Runnable)
更新Timer线程上的UI组件,如Android developer page和API Doc page
如果这不符合您的要求,您也可以使用View.post(Runnable)
方法(也在上面的开发者页面上解释)
答案 2 :(得分:1)
你可以做的是创建一个内部AsyncTask类,它将在后台工作(获取你想要刷新textview的数据),当在后台完成这项工作时,你将结果发布在onPostExecute中(你可以在这里更新UI textview)方法。
拥有AsyncTask内部类之后,你每隔5秒就会在你的计时器中做一些事情:
new MyAsyncTask.execute();