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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦