Adapter刷新数据bug:改变“数据源”后,数据不刷新

2019-01-22  本文已影响85人  koinzhang

博主最近要实现listpopwindow的显示数据动态刷新:利用Adapter刷新数据实现联想词提示。楼主的思路是改变数据源后,通知view进行数据刷新,但是在尝试过后,数据一直不刷新,博主百度之后,终于找出原因,因为adapter监听的数据源的内存地址没有改变,adapter数据源实际上还是原本的数据源,所以数据没有刷新。
博主本来使用字符串数组当作数据源,楼主改变数据源的代码如下matchList = keyWordMatch.getMatch(list, s.toString());getMatch的返回值是一个字符串数组,博主直接令两个字符串相等来赋值,结果就是改变了matchList的内存地址,结果adapter监听的数据源地址不变,真正的数据源不变,数据不刷新。
后来博主改用list<String>集合来做数据源,主要也是方便改变数据源,博主改正的代码如下

                    List<String> ml = keyWordMatch.getMatch(list,s.toString());
                    matchList.clear();//清空原list中的旧数据
                    matchList.addAll(ml);//向原list中添加新数据
                    adapter.notifyDataSetChanged();//通知view数据源改变,刷新数据

这里getMatch博主也作了修改,返回List<String>类型,关键代码

                    matchList.clear();
                    matchList.addAll(ml);

这样修改list集合之后,才能正确改变数据源,做到正常刷新数据。具体实现代码参考利用Adapter刷新数据实现联想词提示

参考文章:

  1. adapter调用notifyDataSetChanged刷新没有起作用的原因,范红康
  2. Android——Listview不用notifydatasetchanged更新数据的方法,It一zhai男
  3. java List复制:浅拷贝与深拷贝,DeMonnnnnn
上一篇下一篇

猜你喜欢

热点阅读