Adapter.notifyDataSetChanged无法更新页面分析及解决方法

这个Adapter内部一般是构造函数有

this.mObjects = objects;

假设此时objects指向addr1
这个mObjects指向了构建Adapter时的那个objects引用指向的内存地址address1。
我们如果直接在activity中这样构造Adapter

private List<CatUnit> catUnits;
  catUnitAdapter = new ArrayAdapter<CatUnit>(this.getActivity(),R.layout.custom_spiner_text_item,catUnits);

当异步请求成功回调的时候会有catUnits = 异步请求到的List。就相当于将objects指向别的地址比如addr2。
但是这时Adapter内部的mObjects 依然指向address1。所以notifyDataSetChanged无效。

针对这个问题有两种方法:
1. mObjects 指向最新的异步请求的数据的地址addressX。
java
adapter.setObjects(newObjects);
adapter.notifyDataSetChanged();

2. mObjects 依然指向第一次的objects,但是在objects通过先clear,然后addAll将最新的异步请求数据添加到address1中。

catUnits.clear();                         catUnits.addAll(response);                            catUnitAdapter.notifyDataSetChanged();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值