Aktualisierung von ExpandableListView mit notifyDataSetChanged ()

8

Zuerst eine kurze Übersicht meines Codes, ich hoffe, es ist verständlich:

  • Ich habe eine Klasse namens ToDoElement mit ein paar Variablen.
  • Ich habe eine andere Klasse namens ToDoListe , die die ToDoElement s in einer ArrayList verwaltet.
  • ToDoListe enthält die Methode deleteElement() , um eine ToDoElement von der ArrayList
  • zu löschen
  • In meiner Hauptaktivität liste_activity erstelle ich ein Objekt von ToDoListe und fülle es mit einigen Objekten von ToDoElement .
  • In derselben Aktivität habe ich eine ExpandableListView mit meinem eigenen Adapter namens expListAdapter .
  • Der Adapter erstellt die Groupviews und Childviews, indem er die String-Variablen von ToDoElement s.
  • abruft
  • Ich habe für jedes Gruppenelement der Liste ein ContextMenu erstellt, in dem ich die Methode deleteElement() verwende.

Ok, jetzt ist hier mein Problem :

Nachdem ich die Methode deleteElement() verwendet habe, möchte ich meine Liste aktualisieren, da sich die Daten der ArrayList in ToDoListe geändert haben. Also rufe ich expListAdapter.notifyDataSetChanged() auf. Aber dann stürzt meine ganze Aktivität ab, mit dem Grund: " IndexOutOfBoundException: Ungültiger Index 4, Größe ist 4 " (Ich hatte 5 ToDoELement -Elemente in meiner Liste , bevor ich einen von ihnen lösche).
Ich weiß, das liegt an einer meiner for-Schleifen, aber ich habe keine Ahnung warum.

Codefragmente:

neues Objekt der ToDoListe erstellen:

%Vor%

Klasse ToDoListe (nur die wichtigen Methoden):

%Vor%

Liste definieren Adapter:

%Vor%

Erstellen Sie ArrayLists für die Liste Adapter:

%Vor%

mein eigener Listenadapter (nur die wichtigen Methoden):

%Vor%

Verwendung von notifyDataSetChanged ():

%Vor%


Vielen Dank für Ihre Aufmerksamkeit!

    
OnClickListener 13.02.2012, 12:20
quelle

3 Antworten

4

Sie müssen der DeleteMethod eine Adapter Art hinzufügen und das Element manuell aus der Adapter entfernen und nicht nur aus List entfernen.

Jedes Mal, wenn Sie die Ansichten mit notifyDataSetChanged() aktualisieren, ruft Adapter die Schleife um List auf. Ihr List in Adapter erhält aufgrund der vorgenommenen Änderungen einen Nullwert.

    
daigoor 13.02.2012, 12:44
quelle
4

Rufen Sie super in Ihrem registerDataSetObserver auf, meke notifyDataSetChanged () funktioniert gut.

%Vor%     
LenaYan 12.04.2014 05:00
quelle
0

Sie sollten expListAdapter.notifyDataSetInvalidated()

aufrufen

expListAdapter.notifyDataSetChanged() aktualisiert nur Ihre Ansichten für die neuen Werte für die einzelnen Elemente (keine Änderung in einem der Elemente)

d. h., es ruft wieder Ihre getChildView und getGroupView für jedes Element auf.

    
Vivek Khandelwal 13.02.2012 12:27
quelle

Tags und Links