2016-06-27 11 views
0

Ich habe 2 ArrayList & möchte eine von ihnen basierend auf Bedingungen festlegen. Es wird jedoch nicht festgelegt.Set 2 verschiedene Liste zu Spinner basierend auf Bedingung

Inside onCreate() Ich definierte ArrayAdapter & eine der Listen basierend auf Bedingung. Das erste Mal funktioniert es aber das nächste Mal, wenn ich Listen aktualisieren & versuchen, setzt wieder mit notifyDataSetChanged() dann nicht funktioniert & Spinner zeigt leere Liste in DD.

Pseudo-Code ist unter

list1, list2; 
flag = True/False; 
arraydapter(context, res, flag ? list1 : list2); 

refreshList() { 
if (flag) 
list1.clear(); 
else 
list2.clear(); 

addDataInList(); 
} 

addDataInList() { 
if (flag) 
list1.add(something); 
else 
list2.add(something); 

adapter.notifyDataSetChanged(); 
} 
+2

Nope von notifyDataSetChanged Methode, die Sie nicht Liste der Daten ändern können, diese Methode verwendet wird, wenn es in Ihrer aktuellen Liste gibt es jede Aktualisierung, aber wenn man total Liste ändern Sie dann müssen Sie erneut als Adapter zu Listview, oder Sie können nur nur für die Liste verwenden und aktualisieren Sie es und rufen Sie Notify-Methode – Vickyexpert

+0

Sie sollten Ihren echten Code, nicht Ihren Pseudo-Code zeigen. Aber, eine Frage, die ich bereits basierend auf dem Pseudocode habe: wann ist "arraydapter (context, res, flag? List1: list2);" hingerichtet? Einmal in der onCreate()? Wenn dies der Fall ist, ist der Adapter leer, wenn er nicht markiert ist. – Niels

+1

haben Sie versucht, zwei verschiedene Adapter zu erstellen und dann den Adapter basierend auf Ihrem Zustand zu ändern? – hehe

Antwort

0

Ändern list1/list2 verändert nicht die Liste, die Sie Array Adapter bestanden haben.

Sie müssen diese neuen Daten im Array-Adapter festlegen, bevor Sie notifydatasetchanged() aufrufen, oder Sie müssen einen neuen Adapter erstellen.

Ich empfehle, eine Funktion namens setData, die die Liste innerhalb Arrayadapter ersetzt und namens notifydatasetchanged.

0

Das Problem ist, dass der Adapter nur einmal eingestellt wird. Da der Adapter entweder list1 oder list2 referenziert, enthält der Spinner nur Leerzeichen, wenn der flag umklappt.

Verwenden Sie daher nur eine einzige Liste. Ich habe Ihre Pseudo-Code entsprechend angepasst:

list; 
flag = True/False; 

onCreate() { 
    arraydapter(context, res, list); 
} 

refreshList() { 
    list.clear(); 

    if (flag) 
     list.add(something);  // i.e. list1 contents 
    else 
     list.add(something_else); // i.e. list2 contents 

    adapter.notifyDataSetChanged(); 
}