适配器卡在旧的 ArrayList 上
Adapter stuck to an old ArrayList
我正在对几个数组列表执行一些重新排序,我有一个名为
的适配器
adapterMeasureEvi
从 DataIpat
class.
设置为名为 measureEviArray
的静态 ArrayList
在调试时,我可以看到静态列表已正确分配,并且会向适配器发出列表已更改的通知。
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
adapterMeasureEvi.notifyDataSetChanged();
问题是,当调用 getView()
方法时,它带来的第一个项目来自旧列表,当我查看对象时,它们的索引已更改,这意味着我已经更新了属性,但为什么会这样仍然停留在旧列表上?
/////编辑////
我刚刚在适配器的构造函数中注意到 class 列表肯定是旧的。
public MeasureTableAdapter(Activity context, ArrayList<MeasureEvi> myMeasureEvi) {
super(context, R.layout.adapter_tablamedida_item, myMeasureEvi);
this.context = context;
this.myMeasureEvi = myMeasureEvi;
}
这个构造函数在对象被实例化时只被调用一次,所以我想这意味着它会卡在那里,我该如何更新那个列表?
我认为问题在于当数据更改时,您重新创建 DataIpat.measureEviArray
而不是更新它。因此,您的适配器将指向旧数组,而 DataIpat.measureEviArray
指向新更新的数组。解决问题的一种方法是不这样做(创建一个全新的数组):
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
您应该只更新 DataIpad.measureEviArray
数组,以便该数组包含您的新数据(例如,使用 clear
和 addAll
与创建新的 ArrayList
).
停止克隆列表并修改原始列表,很奇怪。
删除了这个,
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
不理想,但可以解决
我正在对几个数组列表执行一些重新排序,我有一个名为
的适配器adapterMeasureEvi
从 DataIpat
class.
measureEviArray
的静态 ArrayList
在调试时,我可以看到静态列表已正确分配,并且会向适配器发出列表已更改的通知。
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
adapterMeasureEvi.notifyDataSetChanged();
问题是,当调用 getView()
方法时,它带来的第一个项目来自旧列表,当我查看对象时,它们的索引已更改,这意味着我已经更新了属性,但为什么会这样仍然停留在旧列表上?
/////编辑////
我刚刚在适配器的构造函数中注意到 class 列表肯定是旧的。
public MeasureTableAdapter(Activity context, ArrayList<MeasureEvi> myMeasureEvi) {
super(context, R.layout.adapter_tablamedida_item, myMeasureEvi);
this.context = context;
this.myMeasureEvi = myMeasureEvi;
}
这个构造函数在对象被实例化时只被调用一次,所以我想这意味着它会卡在那里,我该如何更新那个列表?
我认为问题在于当数据更改时,您重新创建 DataIpat.measureEviArray
而不是更新它。因此,您的适配器将指向旧数组,而 DataIpat.measureEviArray
指向新更新的数组。解决问题的一种方法是不这样做(创建一个全新的数组):
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
您应该只更新 DataIpad.measureEviArray
数组,以便该数组包含您的新数据(例如,使用 clear
和 addAll
与创建新的 ArrayList
).
停止克隆列表并修改原始列表,很奇怪。
删除了这个,
DataIpat.measureEviArray = (ArrayList<MeasureEvi>)measureEviArray.clone();
不理想,但可以解决