Bewährte Methode zum asynchronen Löschen eines ListView / RecyclerView-Elements

8

Ich habe ein ListView mit einem CursorLoader . Der Benutzer kann ListView -Elemente öffnen (ein anderes Fragment öffnen) oder Elemente löschen. Alle Datenbankaktionen laufen asynchron ab und dauern normalerweise einen Bruchteil einer Sekunde. Aber technisch könnte der Benutzer ein Element löschen und dann das Element vor dem Löschen Callback und Ursache und Fehler öffnen. Was ist der beste Weg, damit umzugehen? Hier sind die Optionen, die ich sehe.

  1. Nimm einfach an, dass AsyncTask immer schnell genug passieren wird, um ein Problem zu vermeiden
  2. Führen Sie den Datenbankvorgang im UI-Thread
  3. aus
  4. Machen Sie ListView vor AsyncTask ungültig (dies würde jedoch zu einem Flash in der Benutzeroberfläche führen)
  5. Blockiert Benutzereingaben während des AsyncTask

Bearbeiten: Ich habe RecyclerView verwendet, aber ich kann adapter.notifyItemRemoved(itemPos) erst aufrufen, nachdem ich das Element aus der Datenbank gelöscht habe.

    
cambunctious 03.04.2016, 19:30
quelle

3 Antworten

6

Die beste Option in Ihrem Fall ist RecyclerView . Wenn Sie auf Löschen geklickt haben, können Sie adapter.notifyItemRemoved(itemPos) aufrufen. Das Listenelement wird also mit der Animation von RecyclerView entfernt und Sie müssen sich nicht um das Ergebnis der Löschoperation kümmern.

Lesen Sie das Tutorial für Android-Entwickler zu Erstellen von Listen und Karten :

  

Verwenden Sie das Widget RecyclerView , wenn Sie über Datensammlungen verfügen, deren   Elemente ändern sich zur Laufzeit basierend auf Benutzeraktionen oder Netzwerkereignissen.

Hier ist ein Beispiel:

%Vor%     
Emin Ayar 03.04.2016 20:21
quelle
3
%Vor%

Oder verwenden Sie RecyclerView mit Entfernungsanimation.

build.gradle

%Vor%

activity_main.xml

%Vor%

meine_item.xml

%Vor%

MainActivity.java

%Vor%     
Andrew 03.04.2016 19:41
quelle
0

Wenn Ihre -Datenbankabfrage nicht viele Daten zurückgibt , gibt es kein Problem, Datenbankvorgänge im UI-Thread auszuführen.

    
R.Baldha 08.05.2016 06:14
quelle