博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于数据不同步 Inconsistency detected vs The content of the adapter has changed but ListView ......
阅读量:3593 次
发布时间:2019-05-20

本文共 3628 字,大约阅读时间需要 12 分钟。

关于数据不同步的问题

ListView  

1.报错: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. 

2. 出现时机:点击

RecyclerView  

1.报错 java.lang.IndexOutOfBoundsException: Inconsistency detected

2.出现时机:滑动

复现步骤Demo:

package com.example.administrator.recycleviewmultidemo.demo;import android.app.Activity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.chad.library.adapter.base.entity.MultiItemEntity;import com.example.administrator.recycleviewmultidemo.R;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity {    private RecyclerView rv;    private ListView lv;    private List beans = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        beans.add(null);        doRecycleView();//        doListView();    }    private void doListView() {        lv = findViewById(R.id.lv);        lv.setAdapter(new BaseAdapter() {            @Override            public int getCount() {                return beans.size();            }            @Override            public Object getItem(int position) {                return null;            }            @Override            public long getItemId(int position) {                return 0;            }            @Override            public View getView(int position, View convertView, ViewGroup parent) {                TextView tv = new TextView(MainActivity.this);                tv.setHeight(200);                tv.setText("hhhhhdddddddddddddddddddd");                return tv;            }        });        lv.postDelayed(new Runnable() {            @Override            public void run() {                beans.clear();            }        },3000);    }    private void doRecycleView() {        rv = findViewById(R.id.rv);        rv.setLayoutManager(new LinearLayoutManager(this));        rv.setAdapter(new MyRecycleAdapter());        rv.postDelayed(new Runnable() {            @Override            public void run() {                beans.clear();            }        },3000);    }    class  MyRecycleAdapter extends RecyclerView.Adapter{        @Override        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            TextView tv = new TextView(MainActivity.this);            tv.setHeight(200);            tv.setText("hhhhhdddddddddddddddddddd");            return  new RecyclerView.ViewHolder(tv){            };        }        @Override        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        }        @Override        public int getItemCount() {            return beans.size();        }    }}

xml:

    分别使用上面的doListView() 和doRecycleView() 可以复现(注意修改xml)

解决:1.避免数据不同步,数据改变要通知

          2.深拷贝

          3.不要直接改变adapter的数据,使用临时变量存储过渡

转载地址:http://qzgwn.baihongyu.com/

你可能感兴趣的文章
linux系统设置oracle开机自启
查看>>
数据库的五种索引类型
查看>>
设计模式之原型模式
查看>>
设计模式之建造者模式
查看>>
设计模式之代理模式
查看>>
设计模式之门面模式
查看>>
设计模式之装饰器模式
查看>>
设计模式之享元模式
查看>>
设计模式之组合模式
查看>>
设计模式之委派模式
查看>>
设计模式之模板方法模式
查看>>
设计模式之策略模式
查看>>
设计模式之责任链模式
查看>>
怎么成为一个合格的ERP系统管理员
查看>>
企业为什么要用ERP
查看>>
ERP计划层次探讨
查看>>
ERP的五大核心思想
查看>>
ERP、PLM是什么意思?ERP、PLM有什么内在联系
查看>>
公司升级ERP管理系统的三大诱因
查看>>
Android四大应用组件(一)——Activity
查看>>