io.realm:realm-gradle-plugin:2.2.0
org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.6
Android ist fast ein Anfänger. Also sei sanft .. Es ist schwer, "Recycler" als "Recycle" loszuwerden.
Bei Verwendung von Realm und RecyclerView wollte ich die Zeilenanimation beim Löschen von Daten ausführen (Aktualisierung im Modell), aber es gab verschiedene Dinge, die ich nicht getan habe.
Ich war der Meinung, dass die folgende Methode eine einfache Methode ist, um "Hinzufügen", "Aktualisieren", "Verschieben" und "Löschen" zu Row of RecyclerView unter Android zu animieren.
Erstellen Sie eine Unterklasse, die "android.support.v7.widget.RecyclerView.ItemAnimator" erbt
Überschreiben Sie die erforderliche Methode
Rufen Sie die Benachrichtigungsmethode von __ außer notifyDataSetChanged
__ von Adapter entsprechend der gewünschten Operation auf (* 1).
Ereignisse fallen in Unterklassen von ItemAnimator.
1: Benachrichtigungsmethode für RecyclerView-Datenvorgänge
notifyItemChanged / notifyItemRangeChanged
notifyItemInserted / notifyItemRangeInserted
notifyItemMoved
notifyItemRemoved / notifyItemRangeRemoved
Dieses Mal habe ich mich für [SimpleItemAnimator] entschieden (https://developer.android.com/reference/android/support/v7/widget/SimpleItemAnimator.html).
A wrapper class for ItemAnimator that records View bounds and decides whether it should run move, change, add or remove animations. This class also replicates the original ItemAnimator API.
Wie Sie im offiziellen Dokument sehen können, scheint es sich um eine Klasse zu handeln, die ItemAnimator auf einfach zu verwendende Weise umschließt. Daher dachte ich, dies würde ausreichen, wenn ich nichts Aufwändiges tun würde.
Als nächstes implementierte ich die notwendigen Methoden.
class MainTimelineRowAnimator : SimpleItemAnimator() {
override fun runPendingAnimations() {...}
override fun animateAdd(holder: RecyclerView.ViewHolder?): Boolean {...}
override fun animateChange(oldHolder: RecyclerView.ViewHolder?, newHolder: RecyclerView.ViewHolder?, fromLeft: Int, fromTop: Int, toLeft: Int, toTop: Int): Boolean {...}
override fun animateMove(holder: RecyclerView.ViewHolder?, fromX: Int, fromY: Int, toX: Int, toY: Int): Boolean {...}
override fun animateRemove(holder: RecyclerView.ViewHolder?): Boolean {...}
override fun isRunning(): Boolean {...}
override fun endAnimation(item: RecyclerView.ViewHolder?) {...}
override fun endAnimations() {...}
}
Dieser Artikel war für die Erklärung von Item Animator von RecyclerView sehr einfach zu verstehen.
Wenn Sie die Zeile in RecyclerView animieren möchten, können Sie nach dem Löschen des Datasets die Typmethode "notifyItemXXX" aufrufen.
Um Realm mit RecyclerView zu verwenden, verwenden Sie "RealmRecyclerViewAdapter". Werfen wir hier einen Blick auf die Implementierung.
// Right now don't use generics, since we need maintain two different
// types of listeners until RealmList is properly supported.
// See https://github.com/realm/realm-java/issues/989
this.listener = hasAutoUpdates ? new RealmChangeListener() {
@Override
public void onChange(Object results) {
notifyDataSetChanged();
}
} : null;
Wie in Github erläutert, werden detaillierte Benachrichtigungen noch nicht unterstützt. Selbst wenn Sie notifyItemRemoved () auf der Seite Aktivität, Fragment aufrufen, reagiert es nicht ...
Recommended Posts