2017-05-09 62 views
0

我在一對夫婦的數組列表中進行一些重新排序,我有一個名爲適配器堅持舊的ArrayList

adapterMeasureEvi

被設置爲靜態ArrayListDataIpat稱爲measureEviArray適配器類。

調試時,我可以看到靜態列表已正確分配,並且它通知適配器列表已更改。

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

問題是,當getView()方法被調用的第一個項目它帶來的是從舊的名單,當我仰望他們的指標已經改變了,這意味着我已經更新了屬性的對象,但爲什麼它仍卡住在舊名單上?

/////編輯////

我只注意到在適配器類名單肯定是舊的構造函數。

public MeasureTableAdapter(Activity context, ArrayList<MeasureEvi> myMeasureEvi) { 
    super(context, R.layout.adapter_tablamedida_item, myMeasureEvi); 
    this.context = context; 
    this.myMeasureEvi = myMeasureEvi; 
} 

這個構造函數只有一次當對象被實例化,所以我想這意味着它會在那裏卡住了,我怎麼可以更新列表?

回答

0

只需停止克隆列表並工作原來的工作,很奇怪。

刪除此,

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

不理想,但解決方法

0

我認爲問題在於當數據發生變化時,您將重新創建DataIpat.measureEviArray而不是更新它。因此,您的適配器將指向舊陣列,並且DataIpat.measureEviArray指向新更新的陣列。解決你的問題的一種方法是不是做這個(創建一個全新的陣列):

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

使這個數組包含新的數據你應該只更新DataIpad.measureEviArray陣列(例如,使用clearaddAll基本上得到與創建新的ArrayList的效果相同)。