io.realm:realm-gradle-plugin:2.2.0
org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.6
Android est presque un débutant. Alors soyez doux. Il est difficile de se débarrasser de «Recycler» comme «Recycler».
Lors de l'utilisation de Realm et RecyclerView, je voulais exécuter l'animation de ligne lors de la suppression des données (mise à jour dans le modèle), mais il y avait diverses choses que je n'ai pas faites.
J'ai senti que la méthode suivante est une méthode simple pour animer ʻadd,
update,
move et
delete` vers Row of RecyclerView sur Android.
Créez une sous-classe qui hérite de ʻandroid.support.v7.widget.RecyclerView.ItemAnimator`
Remplacer la méthode requise
Appelez la méthode de notification de __ autre que notifyDataSetChanged
__ de Adapter en fonction de l'opération que vous souhaitez effectuer (* 1)
Les événements appartiennent à des sous-classes de ItemAnimator.
1: Méthode de notification de l'opération de données RecyclerView
notifyItemChanged / notifyItemRangeChanged
notifyItemInserted / notifyItemRangeInserted
notifyItemMoved
notifyItemRemoved / notifyItemRangeRemoved
Cette fois, j'ai décidé d'utiliser SimpleItemAnimator.
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.
Comme vous pouvez le voir dans le document officiel, il semble que ce soit une classe qui enveloppe ItemAnimator d'une manière facile à utiliser, alors j'ai pensé que ce serait suffisant si je ne faisais rien de élaboré.
Ensuite, j'ai implémenté les méthodes nécessaires.
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() {...}
}
Cet article était très facile à comprendre pour l'explication de Item Animator de RecyclerView.
Si vous souhaitez animer la ligne dans RecyclerView, vous pouvez appeler la méthode de type notifyItemXXX
après avoir supprimé l'ensemble de données.
Pour utiliser realm avec RecyclerView, utilisez RealmRecyclerViewAdapter
. Jetons un œil à l'implémentation ici.
// 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;
Comme discuté dans Github, il indique qu'il ne prend pas encore en charge les notifications détaillées. Donc, même si vous appelez notifyItemRemoved () du côté Activity, Fragment, il ne répond pas ...