Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }