Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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;
             }
         });
     }
 }