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); }
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(); }
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) { }
protected virtual void UpdateAdapter() { ItemsViewAdapter = new ItemsViewAdapter(ItemsView); SwapAdapter(ItemsViewAdapter, true); }