我有一个 Recyclerview,在每个项目中,我放了 2 个名为 IncementBtn nad DecrementBtn 的按钮来递增和递减 ListOrders 中的项目。还有一个显示项目编号的 Textview。Recyclerview 在 viewpager 中,每个页面的寻呼机相关到 ViewPager 选项卡。当我点击 incrementBtn 再增加一个数量时,第七个位置也发生了变化,并将数量显示为点击的项目。 当我点击一个项目时,一切都很好,第七个项目也受到影响。
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;
}
}
我哪里错了? 请帮助克服这个问题。
最佳答案
在设置 recyclerView 时尝试为 recyclerView 设置 ItemCachedSize。
YourRecyclverView.setAdapter(matchItemAdapter);
YourRecyclverView.setNestedScrollingEnabled(false);
YourRecyclverView.setLayoutManager(layoutManager);
YourRecyclverView.setItemViewCacheSize(100);
我遇到了这个错误并通过将 Item 缓存 View 设置为 100 来解决。
关于android - 在 Recyclerview 中点击一个项目会影响每七个项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47979330/