2017-05-09 5 views
0

ich einige Umordnung in ein paar Array-Liste am Ausführen, ich habe einen AdapterAdapter stecken zu einem alten Arraylist

adapterMeasureEvi genannt

, die auf eine statische ArrayList genannt gesetzt measureEviArray von DataIpat Klasse.

Beim Debuggen kann ich sehen, dass die statische Liste richtig zugewiesen wurde und es folgt eine Benachrichtigung an den Adapter, dass die Liste geändert hat.

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

Problem ist, wenn getView() Methode das erste Element aufgerufen wird, bringt sie aus der alten Liste, wenn ich in die Objekte sehen ihre Indizes haben sich geändert, das bedeutet, dass ich die Attribute aktualisiert haben, aber warum ist es immer noch stecken auf der alten Liste?

///// EDIT ////

ich nur an den Konstruktor des Adapters Klasse bemerkt, dass die Liste auf jeden Fall die alte.

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

dieser Konstruktor wird nur einmal aufgerufen, wenn das Objekt instanziiert wird, so dass ich glaube, es bedeutet, dass es dort stecken, wie kann ich diese Liste aktualisieren?

Antwort

0

Hör einfach auf, die Liste zu klonen und über das Original zu arbeiten, seltsam.

Gelöschte dies,

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

nicht ideal, aber eine Behelfslösung

0

Ich denke, das Problem ist, dass wenn die Daten ändern, Sie die DataIpat.measureEviArray neu erstellen, anstatt es zu aktualisieren. Daher zeigt Ihr Adapter auf das alte Array und das DataIpat.measureEviArray zeigt auf das neu überarbeitete Array. Eine Möglichkeit, das Problem zu beheben ist, anstatt dies zu tun (eine Marke neues Array erstellen):

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

Sie sollten nur aktualisieren, um die DataIpad.measureEviArray Array so, dass dieses Array Ihre neue Daten enthalten (zB mit clear und addAll grundsätzlich zu erhalten der gleiche Effekt wie beim Erstellen eines neuen ArrayList).

Verwandte Themen