private Context context;

private List<ArrayList> list;

 

ListAdapter(Context context, List list){

this。context = context;

this。list = list;

}

@Override

public Object getItem(int position) {

return list。get(position);

}

上述代码是通过上下文环境和数据列表来构造适配器,并且重写其getItem()方法。在此需要明白的是list成员变量是适配器中的私有变量,getItem()方法是当数据显示在ListView时会回调的方法,或者说当显示数据或数据发生改变重写加载数据时会回调这个方法(当然还会调用getView()方法,此时不再赘述)。

代码段3~6模拟数据改变:

代码段3:

dataList。remove(1);

adapter。notifyDataSetChanged();

代码段4:

Map vivian = new HashMap();

vivian。put(“sex”, “girl”);

vivian。put(“nick”, “vivian”);

vivian。put(“content”, “阳光魅力大方无极限”);

dataList。add(vivian);

adapter。notifyDataSetChanged();

代码段5:

dataList = getData();

adapter。notifyDataSetChanged();

 

private List getData(){

List data = new ArrayList();

Map vivian = new HashMap();

vivian。put("sex", "girl");

vivian。put("nick", "vivian");

vivian。put("content", "阳光魅力大方无极限");

data。add(vivian);

 

Map Mryang = new HashMap();

Mryang。put("sex", "boy");

Mryang。put("nick", "杨阳洋");

Mryang。put("content", "成熟稳重高富帅");

data。add(Mryang);

 

return data;

}

 

代码段6:

dataList。clear();

dataList。addAll(getData());

adapter。notifyDataSetChanged();

 

getData()方法同代码段5(略)

以上几种情况模拟了常用的更新数据的方法,在这几种情况种代码段5不能实现数据的更新操作,代码段3、4、6可以实现数据更新操作。为什么代码段3、4、6可以更新,原因大家都明白,是因为数据发生了变化,因此当调用adapter。notifyDataSetChanged()方法时就会把更新后的数据显示出来。

代码段5的数据也发生了变化,为什么不能实现数据更新呢?

当构造Adapter适配器,数据列表dataList传递过去时,是把dataList指向的地址副本作为参数传递给了adapter中的list成员变量了,因此dataList指向的内存区域和adapter中list指向的内存区域是同一块内存区域,代码段3和代码段4对数据的添加、删除操作是在当前区域内进行的,dataList中数据的变化直接影响了adapter中list的数据的变化,因此adapter中的list能够敏感的发现数据发生变化。


上一篇:家长能否陪护儿童感染者吗,家长可以否陪护儿童感染者吗
下一篇:屌丝搜简介什么是屌丝搜

索爱mt15i论坛

郑嘉颖天涯

当前要不断推进禁毒宣传的理念思路

全面准确坚定不移贯彻什么的方针

最高人民检察院检察长连续任职不得超过

安康汉江网讯

极光世界好玩不

17岁學生怎么兼职赚钱,...

crm成功案例分析crm成功案例

陶渊明赠答诗与嵇康赠答诗文献综述

浅谈地质灾害及其分布规律【2498字】

小學生语文學习兴趣的激发与培养【2255字】

浅谈全球价值链视角下传...

学院教职工体育活动现状调查问卷表

關于民办高校人才队伍建...

股票个别风险和预期收益率的关系

磁流变液可控阻尼离合器的设计+CAD图纸