private void SetRecyclerViewAdapters()
        {
            try
            {
                MAdapter = new HotOrNotUserAdapter(Activity)
                {
                    UsersDateList = new ObservableCollection <UserInfoObject>()
                };

                MAdapter.HotItemClick   += MAdapterOnHotItemClick;
                MAdapter.NotItemClick   += MAdapterOnNotItemClick;
                MAdapter.ImageItemClick += MAdapterOnImageItemClick;

                LayoutManager = new LinearLayoutManager(Context);
                //LayoutManager.SetSpanSizeLookup(new MySpanSizeLookup(4, 1, 1)); //5, 1, 2
                MRecycler.SetLayoutManager(LayoutManager);
                //MRecycler.HasFixedSize = true;
                //MRecycler.SetItemViewCacheSize(10);
                //MRecycler.GetLayoutManager().ItemPrefetchEnabled = true;
                var sizeProvider = new FixedPreloadSizeProvider(10, 10);
                var preLoader    = new RecyclerViewPreloader <UserInfoObject>(Activity, MAdapter, sizeProvider, 10);
                MRecycler.AddOnScrollListener(preLoader);
                MRecycler.SetAdapter(MAdapter);

                RecyclerViewOnScrollListener xamarinRecyclerViewOnScrollListener = new RecyclerViewOnScrollListener(LayoutManager);
                MainScrollEvent = xamarinRecyclerViewOnScrollListener;
                MainScrollEvent.LoadMoreEvent += MainScrollEventOnLoadMoreEvent;
                MRecycler.AddOnScrollListener(xamarinRecyclerViewOnScrollListener);
                MainScrollEvent.IsLoading = false;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 2
0
        private void SetRecyclerViewAdapters()
        {
            try
            {
                if (AppSettings.ShowUsersAsCards)
                {
                    GridLayoutManager mLayoutManager = new GridLayoutManager(Activity, 2);
                    NearByRecyclerView.SetLayoutManager(mLayoutManager);
                    CardDateAdapter2 = new CardAdapter2(Activity);
                    NearByRecyclerView.SetAdapter(CardDateAdapter2);
                    CardDateAdapter2.OnItemClick += CardDateAdapter2_OnItemClick;

                    if (MainScrollEvent != null)
                    {
                        return;
                    }
                    MainScrollEvent = new RecyclerViewOnScrollListener(mLayoutManager);
                    NearByRecyclerView.AddOnScrollListener(MainScrollEvent);
                    MainScrollEvent.LoadMoreEvent += SeconderScrollEventOnLoadMoreEvent;
                }
                else
                {
                    StaggeredGridLayoutManager nearByLayoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.Vertical);
                    NearByRecyclerView.SetLayoutManager(nearByLayoutManager);
                    NearByAdapter              = new NearByAdapter(Activity);
                    NearByAdapter.OnItemClick += NearByAdapterOnItemClick;
                    NearByRecyclerView.SetAdapter(NearByAdapter);

                    RecyclerViewOnScrollListener xamarinRecyclerViewOnScrollListener = new RecyclerViewOnScrollListener(nearByLayoutManager, 3);
                    MainScrollEvent = xamarinRecyclerViewOnScrollListener;
                    MainScrollEvent.LoadMoreEvent += SeconderScrollEventOnLoadMoreEvent;
                    NearByRecyclerView.AddOnScrollListener(xamarinRecyclerViewOnScrollListener);
                    MainScrollEvent.IsLoading = false;
                }

                //=======================================================

                //Pro Recycler View
                ProUserAdapter              = new ProUserAdapter(Activity);
                ProUserAdapter.OnItemClick += ProUserAdapterOnItemClick;

                ProRecyclerView.SetLayoutManager(new LinearLayoutManager(Activity, LinearLayoutManager.Horizontal, false));
                ProRecyclerView.SetItemViewCacheSize(20);
                ProRecyclerView.HasFixedSize           = true;
                ProRecyclerView.NestedScrollingEnabled = false;
                ProRecyclerView.GetLayoutManager().ItemPrefetchEnabled = true;
                var sizeProviderPro = new FixedPreloadSizeProvider(10, 10);
                var preLoaderPro    = new RecyclerViewPreloader <UserInfoObject>(Activity, ProUserAdapter, sizeProviderPro, 10);
                ProRecyclerView.AddOnScrollListener(preLoaderPro);
                ProRecyclerView.SetAdapter(ProUserAdapter);

                //=======================================================

                //Hot Or Not Recycler View
                HotOrNotUserAdapter = new HotOrNotUserAdapter(Activity)
                {
                    UsersDateList = new ObservableCollection <UserInfoObject>()
                };
                HotOrNotUserAdapter.HotItemClick   += MAdapterOnHotItemClick;
                HotOrNotUserAdapter.NotItemClick   += MAdapterOnNotItemClick;
                HotOrNotUserAdapter.ImageItemClick += MAdapterOnImageItemClick;


                LayoutManager = new LinearLayoutManager(Activity, LinearLayoutManager.Horizontal, false);
                RecylerHotOrNot.SetLayoutManager(LayoutManager);
                //RecylerHotOrNot.SetItemViewCacheSize(20);
                //RecylerHotOrNot.HasFixedSize = true;
                //RecylerHotOrNot.GetLayoutManager().ItemPrefetchEnabled = true;
                RecylerHotOrNot.NestedScrollingEnabled = false;
                //var sizeProviderPro2 = new FixedPreloadSizeProvider(10, 10);
                //var preLoaderPro2 = new RecyclerViewPreloader<UserInfoObject>(Activity, HotOrNotUserAdapter, sizeProviderPro2, 10);
                //RecylerHotOrNot.AddOnScrollListener(preLoaderPro2);
                RecylerHotOrNot.SetAdapter(HotOrNotUserAdapter);

                RecyclerViewOnScrollListener xamarinRecyclerViewOnScrollListenerHotOrNot = new RecyclerViewOnScrollListener(LayoutManager);
                MainScrollEventHotOrNot = xamarinRecyclerViewOnScrollListenerHotOrNot;
                MainScrollEventHotOrNot.LoadMoreEvent += MainScrollEventHotOrNotOnLoadMoreEvent;
                RecylerHotOrNot.AddOnScrollListener(xamarinRecyclerViewOnScrollListenerHotOrNot);
                MainScrollEventHotOrNot.IsLoading = false;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        // Replace the contents of a view (invoked by the layout manager)
        public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
        {
            try
            {
                Position = position;

                var item = TrendingList[viewHolder.AdapterPosition];
                if (item != null)
                {
                    if (item.Type == ItemType.ProUser || item.Type == ItemType.HotOrNot)
                    {
                        if (viewHolder is TrendingAdapterViewHolder holder)
                        {
                            if (item.Type == ItemType.ProUser)
                            {
                                if (ProUserAdapter == null)
                                {
                                    ProUserAdapter = new ProUserAdapter(ActivityContext)
                                    {
                                        ProUserList = new ObservableCollection <UserInfoObject>()
                                    };

                                    LinearLayoutManager layoutManager = new LinearLayoutManager(ActivityContext, LinearLayoutManager.Horizontal, false);
                                    holder.MRecycler.SetLayoutManager(layoutManager);
                                    holder.MRecycler.GetLayoutManager().ItemPrefetchEnabled = true;
                                    holder.MRecycler.NestedScrollingEnabled = false;

                                    var sizeProvider = new FixedPreloadSizeProvider(10, 10);
                                    var preLoader    = new RecyclerViewPreloader <UserInfoObject>(ActivityContext, ProUserAdapter, sizeProvider, 10);
                                    holder.MRecycler.AddOnScrollListener(preLoader);
                                    holder.MRecycler.SetAdapter(ProUserAdapter);
                                    ProUserAdapter.OnItemClick += ProUserAdapterOnOnItemClick;
                                }

                                int countList = item.ProUserList.Count;
                                if (item.ProUserList.Count > 0)
                                {
                                    if (countList > 0)
                                    {
                                        foreach (var user in from user in item.ProUserList let check = ProUserAdapter.ProUserList.FirstOrDefault(a => a.Id == user.Id) where check == null select user)
                                        {
                                            ProUserAdapter.ProUserList.Add(user);
                                        }

                                        ProUserAdapter.NotifyItemRangeInserted(countList - 1, ProUserAdapter.ProUserList.Count - countList);
                                    }
                                    else
                                    {
                                        ProUserAdapter.ProUserList = new ObservableCollection <UserInfoObject>(item.ProUserList);
                                        ProUserAdapter.NotifyDataSetChanged();
                                    }
                                }

                                holder.MainLinear.Visibility = ViewStates.Visible;
                                holder.MoreText.Visibility   = ViewStates.Invisible;
                                holder.TitleText.Text        = ActivityContext.GetText(Resource.String.Lbl_ProUser);
                            }
                            else if (item.Type == ItemType.HotOrNot)
                            {
                                if (HotOrNotUserAdapter == null)
                                {
                                    HotOrNotUserAdapter = new HotOrNotUserAdapter(ActivityContext)
                                    {
                                        UsersDateList = new ObservableCollection <UserInfoObject>()
                                    };

                                    LinearLayoutManager layoutManager = new LinearLayoutManager(ActivityContext, LinearLayoutManager.Horizontal, false);
                                    holder.MRecycler.SetLayoutManager(layoutManager);
                                    holder.MRecycler.GetLayoutManager().ItemPrefetchEnabled = true;
                                    holder.MRecycler.NestedScrollingEnabled = false;

                                    var sizeProvider = new FixedPreloadSizeProvider(10, 10);
                                    var preLoader    = new RecyclerViewPreloader <UserInfoObject>(ActivityContext, HotOrNotUserAdapter, sizeProvider, 10);
                                    holder.MRecycler.AddOnScrollListener(preLoader);
                                    holder.MRecycler.SetAdapter(HotOrNotUserAdapter);
                                    HotOrNotUserAdapter.HotItemClick   += HotOrNotUserAdapterOnHotItemClick;
                                    HotOrNotUserAdapter.NotItemClick   += HotOrNotUserAdapterOnNotItemClick;
                                    HotOrNotUserAdapter.ImageItemClick += HotOrNotUserAdapterOnImageItemClick;
                                }

                                int countList = item.HotOrNotList.Count;
                                if (item.HotOrNotList.Count > 0)
                                {
                                    if (countList > 0)
                                    {
                                        foreach (var user in from user in item.HotOrNotList let check = HotOrNotUserAdapter.UsersDateList.FirstOrDefault(a => a.Id == user.Id) where check == null select user)
                                        {
                                            HotOrNotUserAdapter.UsersDateList.Add(user);
                                        }

                                        HotOrNotUserAdapter.NotifyItemRangeInserted(countList - 1, HotOrNotUserAdapter.UsersDateList.Count - countList);
                                    }
                                    else
                                    {
                                        HotOrNotUserAdapter.UsersDateList = new ObservableCollection <UserInfoObject>(item.HotOrNotList);
                                        HotOrNotUserAdapter.NotifyDataSetChanged();
                                    }
                                }

                                holder.MainLinear.Visibility = ViewStates.Visible;
                                holder.MoreText.Visibility   = ProUserAdapter.ProUserList?.Count >= 5 ? ViewStates.Visible : ViewStates.Invisible;
                                holder.TitleText.Text        = ActivityContext.GetText(Resource.String.Lbl_HotORNot);
                            }
                        }
                    }
                    else if (item.Type == ItemType.Users)
                    {
                        if (viewHolder is NearByAdapterViewHolder nearByAdapter)
                        {
                            FullGlideRequestBuilder.Load(item.UsersData.Avater).Into(nearByAdapter.ImgUser);

                            nearByAdapter.TxtName.Text = Methods.FunString.SubStringCutOf(QuickDateTools.GetNameFinal(item.UsersData), 20);

                            nearByAdapter.TxtLastSeen.Text      = !string.IsNullOrEmpty(item.UsersData.LastseenTxt) ? item.UsersData.LastseenTxt : Methods.Time.TimeAgo(int.Parse(item.UsersData.Lastseen), false);
                            nearByAdapter.OnlineIcon.Visibility = QuickDateTools.GetStatusOnline(item.UsersData.Lastseen, item.UsersData.Online) ? ViewStates.Visible : ViewStates.Gone;

                            if (item.UsersData.IsLiked != null && item.UsersData.IsLiked.Value)
                            {
                                nearByAdapter.LottieAnimation.Visibility = ViewStates.Visible;
                                nearByAdapter.LottieAnimation.PlayAnimation();
                            }
                            else
                            {
                                nearByAdapter.LottieAnimation.Visibility = ViewStates.Gone;
                                nearByAdapter.LottieAnimation.CancelAnimation();
                                nearByAdapter.LottieAnimation.Progress = 0;
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }