适配器卡在旧的 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 数组,以便该数组包含您的新数据(例如,使用 clearaddAll 与创建新的 ArrayList).

停止克隆列表并修改原始列表,很奇怪。

删除了这个,

DataIpat.measureEviArray =  (ArrayList<MeasureEvi>)measureEviArray.clone();

不理想,但可以解决