Ho un piccolo (grande) problema.
Da poco ho preso in mano la programmazione per Android (dopo 6 anni di inattività su Java e 4 anni di intensa attività con Delphi e PHP),al di la delle miriadi di novità del linguaggio (java) e di quelle introdotte da android e della relativa logica,mi sto trovando difronte ad un problema non da poco.
Ho un piccolo Db, al momento di una tabella, dove vado a segnarmi dei record che contengono dei parametri. (Creazione db,read e write mi riescono correttamente)
Questi record andranno a popolare una listview tramite il relativo setAdapter con passaggio di un oggetto Arrayadapter e relativo override del getView etc..
Il mio problema nasce prima di arrivare all'istanza di un oggetto arrayAdapter.
Praticamente, quando vado a popolare l'array list di oggetti Orario, appena esce dal ciclo while che lo riempie, rimpiazza tutti gli elementi con l'ultimo inserito.
Il codice che mi da il problema:
final ArrayList<Orario> arrayOrario = new ArrayList<Orario>();
while(cursor.moveToNext()){
arrayOrario.add(new Orario(cursor));
Log.i("Create main","I:"+ cursor.getPosition() + " pk:"+ arrayOrario.get(cursor.getPosition()).getPk());
}
//fino a qui il Log mi scrive correttamente indice e relativo pk dell'oggetto che saranno i = 0 - pk = 3,i = 1 pk = 2, i = 2 - pk = 1.
Log.i("Create main", "Create adapter "+arrayOrario.size());//controllo nuovamente quanti oggetti ho nell'arraylist
for(int i = 0;i< arrayOrario.size();i++){
Log.i("Create main","I:"+ i + " pk:"+ arrayOrario.get(i).getPk());
}
Il logcat:
01-12 16:45:20.362: I/Create main(1208): Record: 3
01-12 16:45:20.362: I/Create main(1208): I:0 pk:2
01-12 16:45:20.372: I/Create main(1208): I:1 pk:3
01-12 16:45:20.372: I/Create main(1208): I:2 pk:1
01-12 16:45:20.372: I/Create main(1208): Create adapter 3
01-12 16:45:20.372: I/Create main(1208): I:0 pk:1
01-12 16:45:20.372: I/Create main(1208): I:1 pk:1
01-12 16:45:20.372: I/Create main(1208): I:2 pk:1
Nel for invece mi scrive correttamente 3 volte i log (3 elementi) però, all'indice i vedo i valori 0,1,2 mentre sul getPk() io vedo sempre e solo il PK dell'ultimo elemento dell'arrayList che nel mio caso è 1.
Dove sto sbagliando?
Il resto del codice funziona correttamente salvo per questo particolare non da poco e il programma si avvia e funziona secondo logica.
Questo problema mi pregiudica ovviamente l'usabilità..Facendo in sostanza riferimento sempre allo stesso record nella tabella,avendo tutti gli elementi pk = 1.
Grazie