-1
각 항목에 IncementBtn nad DecrementBtn이라는 2 개의 버튼을 추가하여 항목 수를 나타내는 ListOrders.And Textview의 항목을 증가 및 감소시킵니다. Recyclerview는 뷰 페이지 및 관련 페이저의 각 페이지에 있습니다. ViewPager 탭. incrementBtn을 클릭하여 수량을 한 번 더 추가하고 일곱 번째 위치도 변경 한 다음 수량을 클릭 된 항목으로 표시합니다. 항목을 클릭했을 때 모든 것이 좋으며 일곱 번째 항목도 영향을받습니다.일곱 번째 항목마다 Recyclerview 효과의 항목을 클릭하십시오?
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이기 때문에 반복적으로 뷰를 재활용합니다. [이 게시물] (https://stackoverflow.com/questions/32427889/checkbox-in-recyclerview-keeps-on-checking-different-items)을 참조로 확인할 수 있습니다. –
정적 행에 대해 CachingStrategy = "RecycleView"를 권장합니다 , 그냥 바인딩 값을 새로 고치십시오, 당신은 모든 컨트롤을 시작하고 단지 수량을 표시해야합니다. – katxalot
@ MuratGuc 감사합니다. 그러나 저에게 의미가 없습니다. –