【问题标题】:Determine realm changeSet fields确定领域 changeSet 字段
【发布时间】:2018-06-05 10:14:44
【问题描述】:

如何使用基本领域适配器侦听器方法确定在 RealmObject 更新时更改了哪些字段?

需要同时拥有范围信息和更改的实体字段信息。

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

【问题讨论】:

  • Realm 3.x、4.x 还是 5.x?
  • @EpicPandaForce 类路径 "io.realm:realm-gradle-plugin:4.3.1"

标签: android kotlin realm realm-mobile-platform realm-list


【解决方案1】:

你可以参考官方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 应该为 false(因为您希望在视图持有者本身中处理它)。

【讨论】:

  • 也许一些解决方案不是在 ViewHolder 中而是在这个特定的 onChange 监听器中处理它?
  • 不,我很确定没有可靠的方法可以做到这一点。在 ViewHolder 中删除/添加 onViewDetachedFromWindowonViewAttachedToWindow 中的对象更改侦听器也可能有意义。
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多