void UnsubscribeCollectionItemsSourceChanged(ItemsViewAdapter <ItemsView, IItemsViewSource> oldItemViewAdapter)
 {
     if (oldItemViewAdapter?.ItemsSource is ObservableItemsSource oldObservableItemsSource)
     {
         oldObservableItemsSource.CollectionItemsSourceChanged -= CollectionItemsSourceChanged;
     }
 }
        void UpdateNativeSelection()
        {
            var mode = ItemsView.SelectionMode;

            ItemsViewAdapter.ClearNativeSelection();

            switch (mode)
            {
            case SelectionMode.None:
                return;

            case SelectionMode.Single:
                var selectedItem = ItemsView.SelectedItem;
                ItemsViewAdapter.MarkNativeSelection(selectedItem);
                return;

            case SelectionMode.Multiple:
                var selectedItems = ItemsView.SelectedItems;

                foreach (var item in selectedItems)
                {
                    ItemsViewAdapter.MarkNativeSelection(item);
                }
                return;
            }
        }
        protected override void UpdateAdapter()
        {
            // By default the CollectionViewAdapter creates the items at whatever size the template calls for
            // But for the Carousel, we want it to create the items to fit the width/height of the viewport
            // So we give it an alternate delegate for creating the views

            var oldItemViewAdapter = ItemsViewAdapter;

            UnsubscribeCollectionItemsSourceChanged(oldItemViewAdapter);

            ItemsViewAdapter = new ItemsViewAdapter <ItemsView, IItemsViewSource>(ItemsView,
                                                                                  (view, context) => new SizedItemContentView(Context, GetItemWidth, GetItemHeight));


            _gotoPosition = -1;

            SwapAdapter(ItemsViewAdapter, false);

            if (ItemsViewAdapter?.ItemsSource is ObservableItemsSource observableItemsSource)
            {
                observableItemsSource.CollectionItemsSourceChanged += CollectionItemsSourceChanged;
            }

            oldItemViewAdapter?.Dispose();
        }
        protected virtual void UpdateAdapter()
        {
            var oldItemViewAdapter = ItemsViewAdapter;

            ItemsViewAdapter = new ItemsViewAdapter(ItemsView);

            SwapAdapter(ItemsViewAdapter, true);

            oldItemViewAdapter?.Dispose();
        }
        protected override void UpdateItemsSource()
        {
            // By default the CollectionViewAdapter creates the items at whatever size the template calls for
            // But for the Carousel, we want it to create the items to fit the width/height of the viewport
            // So we give it an alternate delegate for creating the views

            ItemsViewAdapter = new ItemsViewAdapter <ItemsView, IItemsViewSource>(ItemsView,
                                                                                  (view, context) => new SizedItemContentView(context, () => Width, () => Height));

            SwapAdapter(ItemsViewAdapter, false);
        }
            int GetIndexFromTemplatedCell(global::Android.Views.View view)
            {
                int itemIndex = -1;

                if (view is ItemContentView templatedCell)
                {
                    var bContext = templatedCell?.Element?.BindingContext;
                    itemIndex = ItemsViewAdapter.GetPositionForItem(bContext);
                }

                return(itemIndex);
            }
示例#7
0
        protected virtual void UpdateAdapter()
        {
            var oldItemViewAdapter = ItemsViewAdapter;

            // Stop watching the old adapter to see if it's empty (if we are watching)
            Unwatch(oldItemViewAdapter);

            ItemsViewAdapter = new ItemsViewAdapter(ItemsView);

            SwapAdapter(ItemsViewAdapter, true);

            oldItemViewAdapter?.Dispose();
        }
        void UpdateAdapter()
        {
            var oldItemViewAdapter = ItemsViewAdapter;

            ItemsViewAdapter = CreateAdapter();

            if (GetAdapter() != _emptyViewAdapter)
            {
                SwapAdapter(ItemsViewAdapter, true);
            }

            oldItemViewAdapter?.Dispose();
        }
示例#9
0
        protected virtual void UpdateItemsSource()
        {
            if (ItemsView == null)
            {
                return;
            }

            // Stop watching the old adapter to see if it's empty (if we _are_ watching)
            Unwatch(GetAdapter());

            ItemsViewAdapter = new ItemsViewAdapter(ItemsView, Context);
            SwapAdapter(ItemsViewAdapter, false);

            UpdateEmptyView();
        }
        void UpdateAdapter()
        {
            // By default the CollectionViewAdapter creates the items at whatever size the template calls for
            // But for the Carousel, we want it to create the items to fit the width/height of the viewport
            // So we give it an alternate delegate for creating the views

            var oldItemViewAdapter = ItemsViewAdapter;

            ItemsViewAdapter = new ItemsViewAdapter <ItemsView, IItemsViewSource>(ItemsView,
                                                                                  (view, context) => new SizedItemContentView(Context, GetItemWidth, GetItemHeight));

            SwapAdapter(ItemsViewAdapter, false);

            oldItemViewAdapter?.Dispose();
        }
        void MarkItemSelected(object selectedItem)
        {
            var position       = ItemsViewAdapter.GetPositionForItem(selectedItem);
            var selectedHolder = FindViewHolderForAdapterPosition(position);

            if (selectedHolder == null)
            {
                return;
            }

            if (selectedHolder is SelectableViewHolder selectable)
            {
                selectable.IsSelected = true;
            }
        }
        int GetCarouselViewCurrentIndex(int index)
        {
            var centeredView = this.GetCenteredView();

            if (centeredView is ItemContentView templatedCell)
            {
                var bContext = templatedCell?.Element?.BindingContext;
                index = ItemsViewAdapter.GetPositionForItem(bContext);
            }
            else
            {
                return(-1);
            }

            return(index);
        }
        protected override int DetermineTargetPosition(ScrollToRequestEventArgs args)
        {
            if (args.Mode == ScrollToMode.Element)
            {
                return(ItemsViewAdapter.GetPositionForItem(args.Item));
            }

            if (!Carousel.Loop)
            {
                return(args.Index);
            }

            if (_carouselViewLoopManager == null)
            {
                return(-1);
            }

            var carouselPosition = GetCarouselViewCurrentIndex(Carousel.Position);
            var getGoIndex       = _carouselViewLoopManager.GetGoToIndex(this, carouselPosition, args.Index);

            return(getGoIndex);
        }
 public CarouselViewOnScrollListener(ItemsView itemsView, ItemsViewAdapter <ItemsView, IItemsViewSource> itemsViewAdapter, CarouselViewLoopManager carouselViewLoopManager) : base(itemsView, itemsViewAdapter, true)
 {
     _carouselView            = itemsView as FormsCarouselView;
     _carouselViewLoopManager = carouselViewLoopManager;
 }
 public CarouselViewOnScrollListener(ItemsView itemsView, ItemsViewAdapter <ItemsView, IItemsViewSource> itemsViewAdapter) : base(itemsView, itemsViewAdapter)
 {
 }
示例#16
0
 protected virtual void UpdateAdapter()
 {
     ItemsViewAdapter = new ItemsViewAdapter(ItemsView);
     SwapAdapter(ItemsViewAdapter, true);
 }