タブの作成にPagerSlidingTabStripを使用しており、各タブでRecyclerview
関連するタブ項目を作成する必要があります。たとえば、Toyota、Benz、Ford の名前の 3 つのタブとすべての項目を表示するタブがあるため、Toyota タブにはその車両などがあります。Recyclerview
アイテムには、カートに追加してカートから削除するTextview
ためのボタンと、注文数を表示するためのボタンがあります。削除ボタンTextview
はデフォルトで非表示になっており、ユーザーがアイテムをカートに追加すると削除ボタンとTextview
可視性が true になります。問題は、ユーザーがカートにアイテムを追加すると、[削除] ボタンとTextview
関連アイテムが [すべて] タブに表示されないことです。しかし、すべてのタブで、ユーザーがカートにアイテムを追加すると、関連するタブのアイテムに反映されます。問題はのアダプターだと思いますRecylerview
、ビューを保持し、すべてのアイテムのタブを更新しません。おそらく.Adapterを使用していますNotifyDataSetChanged
がRecyclerview
、機能しません。
カートに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 = "";
}
}
https://forums.xamarin.com/discussion/120389/recycleviewer-adapter-notifydatasetchanged-not-work/p1?new=1の完全なコード