void CreateRecyclerView() { _recyclerView = new ScrollRecyclerView(Application.Context); _recyclerView.SetClipToPadding(false); _adapter = new FastGridAdapter(Element.ItemsSource, _recyclerView, Element, Resources.DisplayMetrics, this); if (Element.IsHorizontal) { _layoutManager = new LinearLayoutManager(Context, OrientationHelper.Horizontal, false); /*{AutoMeasureEnabled = true}*/ _recyclerView.HasFixedSize = true; CalculateLayoutRects(); } else { _gridLayoutManager = new SmoothGridLayoutManager(Context, _columns > 0 ? _columns : 1, OrientationHelper.Vertical, false) { RecyclerView = _recyclerView }; _recyclerView.HasFixedSize = true; _layoutManager = _gridLayoutManager; CalculateLayoutRects(); } _recyclerView.SetLayoutManager(_layoutManager); var scrollListener = new EndlessRecyclerViewScrollListener(_layoutManager, Element, _recyclerView) { EnableLoadMore = Element.LoadMoreCommand != null }; scrollListener.LoadMore += LoadMore; _recyclerView.AddOnScrollListener(scrollListener); _scrollListener = scrollListener; _recyclerView.HorizontalScrollBarEnabled = Element.IsHorizontal; _recyclerView.VerticalScrollBarEnabled = !Element.IsHorizontal; _recyclerView.SetAdapter(_adapter); }
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName == FastGridView.ItemsSourceProperty.PropertyName) { CalculateLayoutRects(); if (_adapter != null && Element != null) { _adapter.Items = Element.ItemsSource; } _recyclerView?.GetLayoutManager()?.ScrollToPosition(0); } else if (e.PropertyName == VisualElement.WidthProperty.PropertyName || e.PropertyName == FastGridView.ItemTemplateSelectorProperty.PropertyName) { _recyclerView?.GetRecycledViewPool()?.Clear(); _recyclerView?.SetAdapter(null); _recyclerView?.SetAdapter(_adapter); CalculateLayoutRects(); _adapter?.NotifyDataSetChanged(); } else if (e.PropertyName == FastGridView.IsScrollEnabledProperty .PropertyName) { Device.BeginInvokeOnMainThread(() => { if (_recyclerView != null && Element != null) { _recyclerView.Enabled = Element.IsScrollEnabled; } }); } else if (e.PropertyName == FastGridView.IsRefreshingProperty.PropertyName) { if (_refresh != null && Element != null) { _refresh.Refreshing = Element.IsRefreshing; } } else if (e.PropertyName == FastGridView .IsPullToRefreshEnabledProperty.PropertyName) { if (_refresh != null && Element != null) { _refresh.IsPullToRefreshEnabled = Element.IsPullToRefreshEnabled; } } else if (e.PropertyName == FastGridView.RefreshTopOffsetProperty .PropertyName) { if (_refresh != null && Element != null) { if (Element.RefreshTopOffset != -1) { _refresh.Refreshing = false; var size = (int)(Element.RefreshTopOffset * _density); _refresh.SetProgressViewOffset(true, 0, size); _refresh.Refreshing = Element.IsRefreshing; } } } else if (e.PropertyName == FastGridView.LoadMoreCommandProperty .PropertyName) { Device.BeginInvokeOnMainThread(() => { if (_scrollListener != null) { _scrollListener.EnableLoadMore = Element?.LoadMoreCommand != null; } }); } }