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