I have a Recyclerview that in each item, I put 2 buttons named IncementBtn nad DecrementBtn to increment and decrement item in ListOrders.And a Textview that show the number of the item .The Recyclerview is in viewpager and each page of pager related to ViewPager Tabs. When I click the incrementBtn to add quantity one more, the seventh position also changed And show the quantity number as a clicked item. Everything is good just when I clicked an item the seventh item also affected.
public class SimpleStringRecyclerViewAdapter : RecyclerView.Adapter
{
private readonly TypedValue mTypedValue = new TypedValue();
private int mBackground;
private List<Food> mValues;
Resources mResource;
private Dictionary<int, int> mCalculatedSizes;
public SimpleStringRecyclerViewAdapter(Context context, List<Food> items, Resources res)
{
context.Theme.ResolveAttribute(Resource.Attribute.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.ResourceId;
mValues = items;
mResource = res;
mCalculatedSizes = new Dictionary<int, int>();
}
public override int ItemCount
{
get { return mValues.Count; }
}
public override async void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
var simpleHolder = holder as SimpleViewHolder;
//simpleHolder.mBoundString = mValues[position].;
simpleHolder.mFoodNameTxt.Text = mValues[position].Name;
simpleHolder.mPriceTxt.Text = mValues[position].Price.ToString();
simpleHolder.foodId = mValues[position].FoodId;
simpleHolder.position = position;
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.From(parent.Context)
.Inflate(Resource.Layout.food_list_item, parent, false);
view.SetBackgroundResource(mBackground);
return new SimpleViewHolder(view);
}
}
public class SimpleViewHolder : RecyclerView.ViewHolder
{
public string mBoundString;
public View mView;
public ImageView mImageView;
public TextView mFoodNameTxt;
public TextView mPriceTxt;
public Button mIncrementBtn;
public Button mDcrementBtn;
public TextView _quantitiyTxt;
public int foodId;
private static int quntitySum = 0;
public int position;
public SimpleViewHolder(View view) : base(view)
{
mView = view;
//mImageView = view.FindViewById<ImageView>(Resource.Id.avatar);
mFoodNameTxt = view.FindViewById<TextView>(Resource.Id.lbl_food_name);
mPriceTxt = view.FindViewById<TextView>(Resource.Id.lbl_price);
mIncrementBtn = view.FindViewById<Button>(Resource.Id.increment_btn);
_quantitiyTxt = view.FindViewById<TextView>(Resource.Id.quantity_txt);
mDcrementBtn = view.FindViewById<Button>(Resource.Id.decrement_btn);
mDcrementBtn.Click += delegate
{
//Find order and decrement
var orderItem = orderList.Find(p => p.FoodId == foodId);
orderItem.Quantity--;
_quantitiyTxt.Text = orderItem.Quantity.ToString();
_fabCart.SetImageBitmap(ConvertTextToBitmap.TextAsBitmap((--quntitySum).ToString(), 36, Color.White));
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;
}
};
mIncrementBtn.Click += delegate
{
_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)
};
orDetail.Quantity++;
orderList.Add(orDetail);
_quantitiyTxt.Text = orDetail.Quantity.ToString();
}
_fabCart.SetImageBitmap(ConvertTextToBitmap.TextAsBitmap((++quntitySum).ToString(), 36, Color.White));
};
}
public override string ToString()
{
return base.ToString() + " '" + mFoodNameTxt.Text;
}
}
What am I wrong? Please help to over Overwhelm this.