0

タブの作成にPagerSlidingTabStripを使用しており、各タブでRecyclerview関連するタブ項目を作成する必要があります。たとえば、Toyota、Benz、Ford の名前の 3 つのタブとすべての項目を表示するタブがあるため、Toyota タブにはその車両などがあります。Recyclerviewアイテムには、カートに追加してカートから削除するTextviewためのボタンと、注文数を表示するためのボタンがあります。削除ボタンTextviewはデフォルトで非表示になっており、ユーザーがアイテムをカートに追加すると削除ボタンとTextview可視性が true になります。問題は、ユーザーがカートにアイテムを追加すると、[削除] ボタンとTextview関連アイテムが [すべて] タブに表示されないことです。しかし、すべてのタブで、ユーザーがカートにアイテムを追加すると、関連するタブのアイテムに反映されます。問題はのアダプターだと思いますRecylerview、ビューを保持し、すべてのアイテムのタブを更新しません。おそらく.Adapterを使用していますNotifyDataSetChangedRecyclerview、機能しません。

カートにbutton追加して削除する: mDecremtBtn および mIncrementBtn をクリックすると表示Textviewされ、ボタンが減少します。

mDcrementBtn.Click += delegate
                    {

                        if (orderList.Count == 0)
                        {
                            quntitySum = 0;
                        }

                        //Find order and decrement
                        var orderItem = orderList.Find(p => p.FoodId == foodId);
                        orderItem.Quantity--;
                        _quantitiyTxt.Text = orderItem.Quantity.ToString();

                        if (orderItem.Quantity == 0)
                        {
                            mDcrementBtn.Visibility = ViewStates.Invisible;
                            _quantitiyTxt.Visibility = ViewStates.Invisible;
                            _quantitiyTxt.Text = "";
                            orderList.Remove(orderItem);
                        }
                        if (orderList.Count == 0)
                        {
                            _fabCart.Visibility = ViewStates.Gone;

                            //Update bageNotification On bottomNavigation Cart when no items in orderlist
                            _badgeNotification.Text = "";
                            _badgeNotification.Visibility = ViewStates.Gone;
                        }
                        _fabCart.SetImageBitmap(ConvertTextToBitmap.TextAsBitmap((--quntitySum).ToString(), 36,
                           Color.White));

                        //Update bageNotification On bottomNavigation Cart
                        _badgeNotification.Text = quntitySum.ToString();
                        _adpter.NotifyDataSetChanged();

                    };

                    mIncrementBtn.Click += delegate
                    {
                        if (orderList.Count == 0)
                        {
                            quntitySum = 0;
                        }
                        _fabCart.Show();
                        mDcrementBtn.Visibility = ViewStates.Visible;
                        _quantitiyTxt.Visibility = ViewStates.Visible;
                        if (orderList.Any(p => p.FoodId == foodId))
                        {
                            //Find order and increment
                            var orderItem = orderList.Find(p => p.FoodId == foodId);

                            orderItem.Quantity++;
                            _quantitiyTxt.Text = orderItem.Quantity.ToString();
                        }
                        else
                        {
                            orDetail = new Order
                            {
                                FoodId = foodId,
                                FoodName = mFoodNameTxt.Text,
                                Price = Convert.ToInt32(mPriceTxt.Text),
                                ClickFlag = true
                            };

                            orDetail.Quantity++;
                            orderList.Add(orDetail);
                            _quantitiyTxt.Text = orDetail.Quantity.ToString();
                        }

                        _fabCart.SetImageBitmap(ConvertTextToBitmap.TextAsBitmap((++quntitySum).ToString(), 36,
                            Color.White));

                        //Update bageNotification On bottomNavigation Cart
                        _badgeNotification.Visibility = ViewStates.Visible;
                        _badgeNotification.Text = quntitySum.ToString();

                        _adpter.NotifyDataSetChanged();

                    };

クラス SimpleStringRecyclerViewAdapter の OnbindeViewHolder では、 RecyclerView.Adapter アイテムが更新されます。

public override  void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
                {
                    var simpleHolder = holder as SimpleViewHolder;    

                    simpleHolder.mFoodNameTxt.Text = _foodItems[position].FoodName;
                    simpleHolder.mPriceTxt.Text = _foodItems[position].Price.ToString();
                    simpleHolder.foodId = _foodItems[position].Id;   

                    var item = orderList.Find(p => p.FoodId == _foodItems[position].Id);
                    if (item != null && item.ClickFlag)
                    {
                        simpleHolder.mDcrementBtn.Visibility = ViewStates.Visible;
                        simpleHolder._quantitiyTxt.Visibility = ViewStates.Visible;
                        simpleHolder._quantitiyTxt.Text = item.Quantity.ToString();

                    }
                    else
                    {
                        simpleHolder.mDcrementBtn.Visibility = ViewStates.Invisible;
                        simpleHolder._quantitiyTxt.Visibility = ViewStates.Invisible;
                        simpleHolder._quantitiyTxt.Text = "";
                    }

                }

Imagenary でのシナリオ: ここに画像の説明を入力

https://forums.xamarin.com/discussion/120389/recycleviewer-adapter-notifydatasetchanged-not-work/p1?new=1の完全なコード

4

0 に答える 0