博主最近要实现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刷新数据实现联想词提示
参考文章:
- adapter调用notifyDataSetChanged刷新没有起作用的原因,范红康
- Android——Listview不用notifydatasetchanged更新数据的方法,It一zhai男
- java List复制:浅拷贝与深拷贝,DeMonnnnnn
网友评论