请教关于 listview的notifyDataSetChanged与Adapter的问题

zdjd110 2016-05-29 11:59:11
众所周知notifyDataSetChanged用于通知adapter根据新数据集刷新view,但是我最近遇到了一个问题。
为了让activity的代码不那么冗长,我把adapter分到了另一个单独的java文件里,这应该也是常见的编程方式(吧
然后是在主线程里通过 new MyAdapter(list)传递数据集,MyAdapter类通过构造器给成员变量list赋值
然而在activity进行了网络操作更新数据集后,activity里的list虽然更新了但是和adapter的list已经没有关系了,所以调用notifyDataSetChanged并没有更新listview。请问有什么好的解决方法吗?

PS:有人说直接在adpter里对list添加setter方法,我觉得应该还会有更好的办法吧。
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31461209 2016-06-01
  • 打赏
  • 举报
回复
可以将加载适配器写在一个方法里,当执行数据更新什么操作时候,重新加载适配器也可以的啊,适配器定义一个全局静态变量
BandaYung 2016-05-31
  • 打赏
  • 举报
回复
然后在你的activity中通过获取网络上的数据,然后设置到Adapter中的setList()方法中,这里应该可以满足你的要求 你还可以在Adapter中再写一个方法就是getList()这里是获取之前的items
BandaYung 2016-05-31
  • 打赏
  • 举报
回复
private List<?> mItems = new ArrayList<?>(); 在Adapter中定义两个方法,一个是setList(List items); public void setList(List items) { mItems.clear(); mItems = items; notifyDatasetChanged(); }
sakura_y 2016-05-31
  • 打赏
  • 举报
回复
private List mList; new Adapter(mList); 请求回来数据之后:mList.clear(); mList.addAll(请求回来的数据);或者直接addAll(请求回来的数据); 然后 adapter.notifyDatasetChanged();
  • 打赏
  • 举报
回复
adapter不能每次都new一个,应该是在create中先初始化一个,然后从头至尾都操作一个adapter,这样操作才可以,你试试
ink_s 2016-05-30
  • 打赏
  • 举报
回复
静态?然后去更新可以吗
insomnia的祝福 2016-05-30
  • 打赏
  • 举报
回复
其实就两种解决办法,一种每次数据更新重新new一个Adapter实例,并通过setAdapter重新设置;第二种Adapter类里提供一个数据更新的方法,我一般会重载notifyDatasetChanged,加一个要更新的数据的参数,在这个方法里面更新数据,并调用系统的notifyDatasetChanged

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧