RealmListのaddChangeListenerの仕組み
英語が読めない上にあんまり情報がなくて詰まっていたので自分用メモ。
realmList.addChangeListener { newRealmList, changeSet -> }
みたいにするとchangeSet
で挿入と削除した要素番号がとれる。
挿入の場合はchangeSet.insertions
削除の場合は changeSet.deletions
という配列に入っている。
if (changeSet.insertions.isNotEmpty) { なんかする }
みたいにして処理をする。
ここまではいいんですが、RealmListにはmove(int oldPos, int newPos)
というメソッドが用意されていて、要素の入れ替えができる。
これをListener側でどう処理するかというと、insertion
とdeletion
両方の配列に値が詰め込まれることになる。
changeSet.changes()
というメソッドは呼ばれない。
配列の1番目の要素を2番目に移動させる場合、
changeSet.insertions.first()
には0
が入り、changeSet.deletions.first()
には 1
が入る。
ちょっと体感的にわかりづらい気がするけど、こういう感じで処理をする。
if (changeSet.insertions.isNotEmpty() && changeSet.deletions.isNotEmpty() ) { //なんかする }
みたいな感じになる。