internal override void Reload(RecyclerViewObservableAdapterBase adapter) { var groupedAdapter = (RecyclerViewObservableGroupedAdapterBase)adapter; ItemsMap.Clear(); ItemsMap.Add(ItemMap.CreateForHeader()); var sectionsCount = groupedAdapter.GetSectionsCount(); for (var section = 0; section < sectionsCount; section++) { ItemsMap.Add(ItemMap.CreateForSectionHeader(groupedAdapter.GetItemsGroup(section)?.Key)); var sectionItemsCount = groupedAdapter.GetSectionItemsCount(section); for (var row = 0; row < sectionItemsCount; row++) { ItemsMap.Add(ItemMap.CreateForItem(groupedAdapter.GetItem(section, row))); } ItemsMap.Add(ItemMap.CreateForSectionFooter(groupedAdapter.GetItemsGroup(section)?.Key)); } ItemsMap.Add(ItemMap.CreateForFooter()); groupedAdapter.NotifyDataSetChanged(); }
internal void ReplaceItems(int section, [NotNull] NotifyCollectionChangedEventArgs args, [NotNull] RecyclerView.Adapter adapter) { var oldStartingIndex = GetItemPlainOffset(section, args.OldStartingIndex); var count = 0; foreach (var item in args.NewItems.NotNull()) { ItemsMap[oldStartingIndex + count++] = ItemMap.CreateForItem(item); } adapter.NotifyItemRangeChanged(oldStartingIndex, count); }
internal void AddItems(int section, [NotNull] NotifyCollectionChangedEventArgs args, [NotNull] RecyclerView.Adapter adapter) { var newStartingIndex = GetItemPlainOffset(section, args.NewStartingIndex); var count = 0; foreach (var item in args.NewItems.NotNull()) { ItemsMap.Insert(newStartingIndex + count++, ItemMap.CreateForItem(item)); } adapter.NotifyItemRangeInserted(newStartingIndex, count); }
internal void AddGroups([NotNull] NotifyCollectionChangedEventArgs args, [NotNull] RecyclerView.Adapter adapter) { var newStartingIndex = GetSectionPlainOffset(args.NewStartingIndex); var count = 0; foreach (IGrouping <object, object> itemsGroup in args.NewItems.NotNull()) { ItemsMap.Insert(newStartingIndex + count++, ItemMap.CreateForSectionHeader(itemsGroup?.Key)); if (itemsGroup != null) { foreach (var item in itemsGroup) { ItemsMap.Insert(newStartingIndex + count++, ItemMap.CreateForItem(item)); } } ItemsMap.Insert(newStartingIndex + count++, ItemMap.CreateForSectionFooter(itemsGroup?.Key)); } adapter.NotifyItemRangeInserted(newStartingIndex, count); }