RecyclerView的notifyDateSetChanged()等不起作用,必须点击屏幕列表才会刷新的解决方法

之前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;
        }
    }
}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值