之前Android项目中用的是PullToRefreshListView,我就在想是不是这个库不太好用?于是我换成了RecyclerView,结果效果还是一样,数据本来已经刷新了notifyDateSetChanged也执行了,但是列表里的展示还是不变,必须点一下手机屏幕,数据才能刷新出来。【notifyItemChanged()等也同理】
百度了一堆,各种方法也都试了,还是不行,要不就是效果极差,要不就是一点效果都没有。最后查了无数遍代码,终于找到了问题所在:
更新UI要在 主线程 执行
代码示例:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private static final int CHANGE_TEXT=1;
private TextView mText;
private Button mBtn_change;
//主线程
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case CHANGE_TEXT:
//在这里(主线程)可以进行UI操作
mText.setText("HelloJohnnyZhou");
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mText= (TextView) findViewById(R.id.tv_text);
mBtn_change= (Button) findViewById(R.id.btn_change);
mBtn_change.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_change:
//开启一个子线程
new Thread(new Runnable() {
@Override
public void run() {
//新建一个Message对象,存储需要发送的消息
Message message=new Message();
message.what=CHANGE_TEXT;
//然后将消息发送出去
handler.sendMessage(message);
}
}).start();
break;
default:
break;
}
}
}