Zuerst eine kurze Übersicht meines Codes, ich hoffe, es ist verständlich:
ToDoElement
mit ein paar Variablen. ToDoListe
, die die ToDoElement
s in einer ArrayList verwaltet. ToDoListe
enthält die Methode deleteElement()
, um eine ToDoElement
von der ArrayList liste_activity
erstelle ich ein Objekt von ToDoListe
und fülle es mit einigen Objekten von ToDoElement
. expListAdapter
. ToDoElement
s. 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!
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.
Sie sollten expListAdapter.notifyDataSetInvalidated()
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.
Tags und Links android expandablelistview