适配器粘贴到旧的ArrayList

时间:2017-05-09 03:40:41

标签: android arraylist adapter android-arrayadapter

我正在几个数组列表中执行一些重新排序,我有一个名为

的适配器
  

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;
}

当对象被实例化时,这个构造函数只被调用一次,所以我想这意味着它会被卡在那里,我该如何更新该列表呢?

2 个答案:

答案 0 :(得分:0)

我认为问题在于,当数据发生变化时,您重新创建DataIpat.measureEviArray而不是更新它。因此,您的适配器将指向旧数组,DataIpat.measureEviArray指向新升级的数组。解决问题的一种方法是不要这样做(创建一个全新的数组):

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

您应该只更新DataIpad.measureEviArray数组,以便此数组包含您的新数据(例如,使用clearaddAll基本上可以获得与创建新{{1}相同的效果})。

答案 1 :(得分:0)

停止克隆列表并完成原来的工作,很奇怪。

删除了这个,

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

不理想但是解决方法