Определить области изменения набора полей - PullRequest
0 голосов
/ 05 июня 2018

Как определить, какие поля изменились при обновлении RealmObject с помощью метода прослушивания базового адаптера области?

Нужно ли иметь информацию о диапазонах и информацию об измененных полях сущности.

fun notifyRecyclerViewOfChanges(changeSet: ChangeSet?) { 
   // ?
}

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете обратиться к официальному realm-android-adapters, чтобы узнать, как его собрать:

private OrderedRealmCollectionChangeListener createListener() {
    return new OrderedRealmCollectionChangeListener() {
        @Override
        public void onChange(Object collection, OrderedCollectionChangeSet changeSet) {
            if (changeSet.getState() == OrderedCollectionChangeSet.State.INITIAL) { // before Realm 5.0, this is `changeSet == null`
                notifyDataSetChanged();
                return;
            }
            // For deletions, the adapter has to be notified in reverse order.
            OrderedCollectionChangeSet.Range[] deletions = changeSet.getDeletionRanges();
            for (int i = deletions.length - 1; i >= 0; i--) {
                OrderedCollectionChangeSet.Range range = deletions[i];
                notifyItemRangeRemoved(range.startIndex, range.length);
            }

            OrderedCollectionChangeSet.Range[] insertions = changeSet.getInsertionRanges();
            for (OrderedCollectionChangeSet.Range range : insertions) {
                notifyItemRangeInserted(range.startIndex, range.length);
            }

            if (!updateOnModification) {
                return;
            }

            OrderedCollectionChangeSet.Range[] modifications = changeSet.getChangeRanges();
            for (OrderedCollectionChangeSet.Range range : modifications) {
                notifyItemRangeChanged(range.startIndex, range.length);
            }
        }
    };
}

Если вам нужны изменения на уровне поля, тогда RealmObject должен иметь свой собственный прослушиватель изменений, используя RealmObjectChangeListener и updateOnModification должно быть ложным (как вы хотите обработать в самом держателе вида).

...