Skip to content

Commit 6716b33

Browse files
committed
fix: support splice with multiple items
1 parent b1d9852 commit 6716b33

File tree

2 files changed

+38
-22
lines changed

2 files changed

+38
-22
lines changed

src/collectionview/collectionview.android.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -712,11 +712,17 @@ export class CollectionView extends CollectionViewBase {
712712
return;
713713
}
714714
case ChangeType.Splice: {
715-
if (event.addedCount > 0) {
716-
this._listViewAdapter.notifyItemRangeInserted(event.index, event.addedCount);
717-
}
718-
if (event.removed && event.removed.length > 0) {
719-
this._listViewAdapter.notifyItemRangeRemoved(event.index, event.removed.length);
715+
const added = event.addedCount;
716+
const removed = (event.removed && event.removed.length) || 0;
717+
if (added > 0 && added === removed) {
718+
this._listViewAdapter.notifyItemRangeChanged(event.index, added);
719+
} else {
720+
if (event.addedCount > 0) {
721+
this._listViewAdapter.notifyItemRangeInserted(event.index, event.addedCount);
722+
}
723+
if (event.removed && event.removed.length > 0) {
724+
this._listViewAdapter.notifyItemRangeRemoved(event.index, event.removed.length);
725+
}
720726
}
721727
return;
722728
}

src/collectionview/collectionview.ios.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -438,25 +438,35 @@ export class CollectionView extends CollectionViewBase {
438438
}
439439
case ChangeType.Splice: {
440440
view.performBatchUpdatesCompletion(() => {
441-
if (event.addedCount > 0) {
442-
const indexes = NSMutableArray.alloc<NSIndexPath>().init();
443-
for (let index = 0; index < event.addedCount; index++) {
444-
indexes.addObject(NSIndexPath.indexPathForItemInSection(event.index + index, 0));
445-
}
446-
view.insertItemsAtIndexPaths(indexes);
447-
}
448-
if (event.removed && event.removed.length > 0) {
441+
const added = event.addedCount;
442+
const removed = (event.removed && event.removed.length) || 0;
443+
if (added > 0 && added === removed) {
449444
const indexes = NSMutableArray.new<NSIndexPath>();
450-
for (let index = 0; index < event.removed.length; index++) {
451-
indexes.addObject(NSIndexPath.indexPathForItemInSection(event.index + index, 0));
445+
for (let index = 0; index < added; index++) {
446+
indexes.addObject(NSIndexPath.indexPathForRowInSection(event.index + index, 0));
447+
}
448+
view.reloadItemsAtIndexPaths(indexes);
449+
} else {
450+
if (event.addedCount > 0) {
451+
const indexes = NSMutableArray.alloc<NSIndexPath>().init();
452+
for (let index = 0; index < event.addedCount; index++) {
453+
indexes.addObject(NSIndexPath.indexPathForItemInSection(event.index + index, 0));
454+
}
455+
view.insertItemsAtIndexPaths(indexes);
452456
}
453-
this.unbindUnusedCells(event.removed);
454-
if (Trace.isEnabled()) {
455-
CLog(CLogTypes.info, 'deleteItemsAtIndexPaths', indexes.count);
457+
if (event.removed && event.removed.length > 0) {
458+
const indexes = NSMutableArray.new<NSIndexPath>();
459+
for (let index = 0; index < event.removed.length; index++) {
460+
indexes.addObject(NSIndexPath.indexPathForItemInSection(event.index + index, 0));
461+
}
462+
this.unbindUnusedCells(event.removed);
463+
if (Trace.isEnabled()) {
464+
CLog(CLogTypes.info, 'deleteItemsAtIndexPaths', indexes.count);
465+
}
466+
view.performBatchUpdatesCompletion(() => {
467+
view.deleteItemsAtIndexPaths(indexes);
468+
}, null);
456469
}
457-
view.performBatchUpdatesCompletion(() => {
458-
view.deleteItemsAtIndexPaths(indexes);
459-
}, null);
460470
}
461471
}, null);
462472
return;
@@ -712,7 +722,7 @@ export class CollectionView extends CollectionViewBase {
712722
cellView['iosIgnoreSafeArea'] = true;
713723
View.layoutChild(this, cellView, 0, 0, cellSize[0], cellSize[1]);
714724
if (Trace.isEnabled()) {
715-
CLog(CLogTypes.log, 'layoutCell', index, cellView, cellView.getMeasuredWidth(), cellView.getMeasuredHeight());
725+
CLog(CLogTypes.log, 'layoutCell', index, cellView.getMeasuredWidth(), cellView.getMeasuredHeight());
716726
}
717727
}
718728

0 commit comments

Comments
 (0)