Android中实现刷新界面的有两种一种是Invalidate,另一种是PostInvalidate
1.Invalidate()是刷新View的,所以必须在UI线程中使用,在修改View的时候调用Invalidate()才能重新绘制界面
案例中使用:
(1)Invalidate()主要刷新UI线程(主线程)
(2)在Handler中刷新主线程,实例化一个Handler对象,并重写handleMessage
(3)方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。
(4)在onCreate()中开启线程,给handler发送更新的消息
Handler myHandler = new Handler() { // 接收到消息后处理 public void handleMessage(Message msg) { switch (msg.what) { case App.REFRESH: 需要刷新的控件.invalidate(); // 刷新界面 break; } } };//new Thread(){}.start()省略
2.另一个刷新界面PostInvalidate()
(1)使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可
(2)由于onCreate()方法是由UI线程执行的,所以也可以把UI线程理解为主线程。其余的线程可以理解为工作者线程,即使用PostInvalidate()。
直接使用:
需要刷新的控件.postInvalidate();
private void setChartData() {
sets.clear();
ArrayList<Entry> e0 = new ArrayList<Entry>();
ArrayList<Integer> colors = new ArrayList<Integer>();
for (int i = 0; i < hourAqiState.size(); i++) {
e0.add(new Entry(hourAqi.get(i), i));
colors.add(Integer.valueOf(GlobalConstents
.getAqiStateColorRGB(hourAqiState.get(i))));
}
LineDataSet d0 = new LineDataSet(e0, "PM10");
d0.setLineWidth(3f);
d0.setCircleSize(5f);
d0.setCircleColors(colors);
d0.setHighLightColor(Color.rgb(244, 117, 117));
sets.add(d0);
LineData cd = new LineData(labelX, sets);
lineChart.setData(cd);
lineChart.postInvalidate();//折线图View界面刷新
}