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界面刷新
}
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦