美文网首页
Adapter刷新数据bug:改变“数据源”后,数据不刷新

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

作者: koinzhang | 来源:发表于2019-01-22 23:10 被阅读85次

    博主最近要实现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

    相关文章

      网友评论

          本文标题:Adapter刷新数据bug:改变“数据源”后,数据不刷新

          本文链接:https://www.haomeiwen.com/subject/jehdjqtx.html