Android中ListView调用Adapter的notifyDataSetChanged()界面没有刷新的原因

本文讲述了如何修复ListView中展开收缩按钮失效的问题,关键在于确保适配器使用的数据列表一致性。作者揭示了由于创建了新的ArrayList导致通知数据更新失败的原因,并提供了正确配置适配器的方法,以确保数据同步显示。
摘要由CSDN通过智能技术生成

问题描述

今天写了个代码,ListView下面增加展开、收缩的按钮。我的思路是为list准备一个副本list2,原来的list用于展示,副本用于恢复数据,思路其实没有错,但是调用notifyDataSetChanged()并没有起到展开、收起的效果。

原因分析

适配器原来是其他人写的,适配器里面已经有new ArrayList的代码了,但是我在Activity里面又new出了一个ArrayList,这和适配器采用的集合不一致,所以调用notifyDataSetChanged()起不到刷新界面的作用。

错误示范如下:

//其他人原来就写好的适配器
public class OtherPeopleAdapter exends BaseAdapter{
	private List<Object> list=new ArrayList();//适配器里面已经new出一个ArrayList了
	public OtherPeopleAdapter(List<Object> list){//构造器
		this.list.addAll(list);
	}
}
public class MainActivity{
	private List<Object> list=new ArrayList();//然而你在活动里又new出一个ArrayList
}

你在活动里又new出一个ArrayList,你希望改变活动里面的ArrayList的元素内容,再调用Adapter的notifyDataSetChanged()方法刷新页面,结果肯定刷新不了的,因为适配器已经早有属于自己的ArrayList了。
正确示范如下:

//其他人原来就写好的适配器
public class OtherPeopleAdapter exends BaseAdapter{
	private List<Object> list;//不要在这里new ArrayList
	public OtherPeopleAdapter(List<Object> list){//构造器
		this.list=list;
	}
}

总而言之,要保证Adapter使用的是同一个ArrayList,不能在这边new一个,那边又new一个,Adapter不会脚踏两条船,别人变成什么样,不关它的事,也就肯定不会刷新页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值