如何在Xamarin Android中处理回收器视图项目内的按钮单击?
这是回收器视图中的项目,所以我想通过单击加号和减号按钮来增加和减少数量。如何在xamarin android中做到这一点 这是我的适配器如何在Xamarin Android中处理回收器视图项目内的按钮单击?,xamarin,xamarin.android,Xamarin,Xamarin.android,这是回收器视图中的项目,所以我想通过单击加号和减号按钮来增加和减少数量。如何在xamarin android中做到这一点 这是我的适配器 public class OrderDetailsItemAdapter : RecyclerView.Adapter { List<OrderItem> orderItemList = new List<OrderItem>(); RecyclerView orderItemsRecyclerV
public class OrderDetailsItemAdapter : RecyclerView.Adapter
{
List<OrderItem> orderItemList = new List<OrderItem>();
RecyclerView orderItemsRecyclerView;
private object orderListitems;
private RecyclerView recyclerview;
Context _context;
public OrderDetailsItemAdapter(List<OrderItem> orderItemList, RecyclerView recyclerview,Context context)
{
this.orderItemList = orderItemList;
this.recyclerview = recyclerview;
_context = context;
}
public override int ItemCount
{
get
{
return orderItemList.Count;
}
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
OrderDetailsItemViewHolder viewHolder = holder as OrderDetailsItemViewHolder;
viewHolder.OrderItemCheckBox.Checked = orderItemList[position].IsChecked;
viewHolder.OrderItemSKU.Text = $"SKU: {orderItemList[position].SKU}";
viewHolder.KitIcon.Visibility = orderItemList[position].IsKit ? ViewStates.Visible : ViewStates.Invisible;
viewHolder.OrderItemKitSKU.Text = $"KIT SKU: {orderItemList[position].KitSKU}";
viewHolder.OrderItemQty.Text = $"REQ QTY: {orderItemList[position].OrderQuantity.ToString()}";
viewHolder.OrderItemShipQty.Text = orderItemList[position].ShipQuantity.ToString();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
LayoutInflater inflater = LayoutInflater.From(parent.Context);
View itemView = inflater.Inflate(Resource.Layout.order_details_layout_view, parent, false);
return new OrderDetailsItemViewHolder(itemView);
}
}
公共类OrderDetailsItemAdapter:RecyclerView.Adapter
{
List orderItemList=新列表();
RecyclerView orderItemsRecyclerView;
私有对象orderListitems;
私人回收站;
语境(Context)语境;;
public OrderDetailsItemAdapter(列表orderItemList、RecyclerView、RecyclerView、上下文上下文)
{
this.orderItemList=orderItemList;
this.recyclerview=recyclerview;
_上下文=上下文;
}
公共覆盖int ItemCount
{
得到
{
返回orderItemList.Count;
}
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
OrderDetailsItemViewHolder viewHolder=作为OrderDetailsItemViewHolder的持有者;
viewHolder.OrderItemCheckBox.Checked=orderItemList[position].IsChecked;
viewHolder.OrderItemSKU.Text=$“SKU:{orderItemList[position].SKU}”;
viewHolder.KitIcon.Visibility=orderItemList[position].IsKit?ViewState.Visible:ViewState.Invisible;
viewHolder.OrderItemKitSKU.Text=$“套件SKU:{orderItemList[position].KitSKU}”;
viewHolder.OrderItemQty.Text=$“请求数量:{orderItemList[position].OrderQuantity.ToString()}”;
viewHolder.OrderItemShipQuantity.Text=orderItemList[position].ShipQuantity.ToString();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
LayoutInflater充气器=LayoutInflater.From(父上下文);
查看项目视图=充气机。充气(Resource.Layout.order\u details\u Layout\u视图,父级,false);
返回新的OrderDetailsItemViewHolder(itemView);
}
}
那么,如何在按钮单击时获取项目的位置呢?您可以使用ElegantButton控件,这是一个用于此目的的自定义控件
public class ElegantNumberButton : RelativeLayout
{
private Context context;
private IAttributeSet attrs;
private int styleAttr;
private IOnClickListener mListener;
private int initialNumber;
private int lastNumber;
private int currentNumber;
private int finalNumber;
private TextView textView;
private Button addBtn, subtractBtn;
private View view;
private IOnValueChangeListener mOnValueChangeListener;
public ElegantNumberButton(Context context) : base(context)
{
this.context = context;
InitView();
}
public ElegantNumberButton(Context context, IAttributeSet attrs) : base(context, attrs)
{
this.context = context;
this.attrs = attrs;
InitView();
}
public ElegantNumberButton(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
this.context = context;
this.attrs = attrs;
this.styleAttr = defStyleAttr;
InitView();
}
private void InitView()
{
this.view = this;
Inflate(context, Resource.Layout.layout, this);
Resources res = this.Resources;
int defaultColor = ResourcesCompat.GetColor(res, Resource.Color.colorPrimary, null);
int defaultTextColor = ResourcesCompat.GetColor(res, Resource.Color.colorPrimary, null);
Drawable defaultDrawable = res.GetDrawable(Resource.Drawable.background);
TypedArray a = context.ObtainStyledAttributes(attrs, Resource.Styleable.ElegantNumberButton, styleAttr, 0);
initialNumber = a.GetInt(Resource.Styleable.ElegantNumberButton_initialNumber, 0);
finalNumber = a.GetInt(Resource.Styleable.ElegantNumberButton_finalNumber, int.MaxValue);
float textSize = a.GetDimension(Resource.Styleable.ElegantNumberButton_textSize, 13);
var color = a.GetColor(Resource.Styleable.ElegantNumberButton_backGroundColor, defaultColor);
var textColor = a.GetColor(Resource.Styleable.ElegantNumberButton_textColor, defaultTextColor);
Drawable drawable = a.GetDrawable(Resource.Styleable.ElegantNumberButton_backgroundDrawable);
subtractBtn = (Button)FindViewById(Resource.Id.subtract_btn);
addBtn = (Button)FindViewById(Resource.Id.add_btn);
textView = (TextView)FindViewById(Resource.Id.number_counter);
LinearLayout mLayout = (LinearLayout)FindViewById(Resource.Id.layout);
subtractBtn.SetTextColor(textColor);
addBtn.SetTextColor(textColor);
textView.SetTextColor(textColor);
subtractBtn.SetTextSize(ComplexUnitType.Sp, textSize);
addBtn.SetTextSize(ComplexUnitType.Sp, textSize);
textView.SetTextSize(ComplexUnitType.Sp, textSize);
if (drawable == null)
{
drawable = defaultDrawable;
}
drawable.SetColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.Src));
if (Build.VERSION.SdkInt > BuildVersionCodes.JellyBean)
mLayout.Background = (drawable);
else
mLayout.SetBackgroundDrawable(drawable);
textView.SetText(initialNumber);
currentNumber = initialNumber;
lastNumber = initialNumber;
subtractBtn.Click += SubtractBtn_Click;
addBtn.Click += AddBtn_Click;
a.Recycle();
}
private void SubtractBtn_Click(object sender, EventArgs e)
{
int num = int.Parse(textView.Text);
SetNumber((num - 1).ToString(), true);
}
private void AddBtn_Click(object sender, EventArgs e)
{
int num = int.Parse(textView.Text.ToString());
SetNumber((num + 1).ToString(), true);
}
private void CallListener(View view)
{
if (mListener != null)
{
mListener.OnClick(view);
}
if (mOnValueChangeListener != null)
{
if (lastNumber != currentNumber)
{
mOnValueChangeListener.OnValueChange(this, lastNumber, currentNumber);
}
}
}
public string GetNumber()
{
return (currentNumber).ToString();
}
public void SetNumber(string number)
{
lastNumber = currentNumber;
this.currentNumber = int.Parse(number);
if (this.currentNumber > finalNumber)
{
this.currentNumber = finalNumber;
}
if (this.currentNumber < initialNumber)
{
this.currentNumber = initialNumber;
}
textView.Text = currentNumber.ToString();
}
public void SetNumber(string number, bool notifyListener)
{
SetNumber(number);
if (notifyListener)
{
CallListener(this);
}
}
public void SetOnClickListener(IOnClickListener onClickListener)
{
this.mListener = onClickListener;
}
public void SetOnValueChangeListener(IOnValueChangeListener onValueChangeListener)
{
mOnValueChangeListener = onValueChangeListener;
}
public interface IOnClickListener
{
void OnClick(View view);
}
public interface IOnValueChangeListener
{
void OnValueChange(ElegantNumberButton view, int oldValue, int newValue);
}
public void SetRange(int startingNumber, int endingNumber)
{
this.initialNumber = startingNumber;
this.finalNumber = endingNumber;
}
public void UpdateColors(Android.Graphics.Color backgroundColor, Android.Graphics.Color textColor)
{
this.textView.SetBackgroundColor(backgroundColor);
this.addBtn.SetBackgroundColor(backgroundColor);
this.subtractBtn.SetBackgroundColor(backgroundColor);
this.textView.SetTextColor(textColor);
this.addBtn.SetTextColor(textColor);
this.subtractBtn.SetTextColor(textColor);
}
public void UpdateTextSize(float newSize)
{
this.textView.SetTextSize(ComplexUnitType.Sp, newSize);
this.addBtn.SetTextSize(ComplexUnitType.Sp, newSize);
this.subtractBtn.SetTextSize(ComplexUnitType.Sp, newSize);
}
}
public class ElegantNumberButton:RelativeLayout
{
私人语境;
私人IAttributeSet属性;
私有int styleAttr;
私人监听者;
私人整数首字母数字;
私人密码;
私钥号码;
私人国际财务编号;
私有文本视图文本视图;
专用按钮addBtn,subtractBtn;
私人视野;
私有IOnValueChangeListener mOnValueChangeListener;
公共优雅数字按钮(上下文):基本(上下文)
{
this.context=上下文;
InitView();
}
public-ElegantNumberButton(上下文,IAttributeSet属性):base(上下文,属性)
{
this.context=上下文;
this.attrs=attrs;
InitView();
}
public-ElegantNumberButton(上下文上下文,IAttributeSet属性,int-defstylettr):base(上下文,属性,defstylettr)
{
this.context=上下文;
this.attrs=attrs;
this.styleAttr=defStyleAttr;
InitView();
}
私有void InitView()
{
this.view=this;
膨胀(上下文,Resource.Layout.Layout,this);
Resources res=this.Resources;
int defaultColor=ResourcesCompat.GetColor(res,Resource.Color.colorPrimary,null);
int defaultTextColor=ResourcesCompat.GetColor(res,Resource.Color.colorPrimary,null);
Drawable defaultDrawable=res.GetDrawable(Resource.Drawable.background);
TypedArray a=context.ActainStyledAttributes(attrs,Resource.Styleable.ElegantNumberButton,styleAttr,0);
initialNumber=a.GetInt(Resource.Styleable.ElegantNumberButton_initialNumber,0);
finalNumber=a.GetInt(Resource.Styleable.ElegantNumberButton_finalNumber,int.MaxValue);
float textSize=a.GetDimension(Resource.Styleable.ElegantNumberButton_textSize,13);
var color=a.GetColor(Resource.Styleable.ElegantNumberButton_backGroundColor,defaultColor);
var textColor=a.GetColor(Resource.Styleable.ElegantNumberButton_textColor,defaultTextColor);
Drawable Drawable=a.GetDrawable(Resource.Styleable.ElegantNumberButton\u backgroundDrawable);
subtractBtn=(按钮)FindViewById(Resource.Id.subtract\u btn);
addBtn=(按钮)findviewbyd(Resource.Id.add\u btn);
textView=(textView)FindViewById(Resource.Id.number\u计数器);
LinearLayout mLayout=(LinearLayout)FindViewById(Resource.Id.layout);
减去btn.SetTextColor(textColor);
addBtn.SetTextColor(textColor);
SetTextColor(textColor);
减去BTN.SetTextSize(ComplexUnitType.Sp,textSize);
addBtn.SetTextSize(ComplexUnitType.Sp,textSize);
SetTextSize(ComplexUnitType.Sp,textSize);
if(可绘制==null)
{
可提取=默认可提取;
}
SetColorFilter(新的PorterDuffColorFilter(color,PorterDuff.Mode.Src));
if(Build.VERSION.SdkInt>BuildVersionCodes.JellyBean)
mLayout.Background=(可绘制);
其他的
mLayout.后退地面可拉深(可拉深);
textView.SetText(initialNumber);
currentNumber=初始编号;
lastNumber=初始编号;
subtractBtn.Click+=subtractBtn\u Click;
addBtn.Click+=addBtn\u Click;
a、 回收();
}
私有void SubtractBtn_单击(对象发送方,事件参数e)
{
int num=int.Parse(textView.Text);
SetNumber((num-1).ToString(),true);
}
私有void AddBtn_单击(对象发送方,事件参数e)
{
int num=int.Parse(textView.Text.ToString());
SetNumber((num+1).ToString(),true);
}
私有void CallListener(视图)
{
if(mListener!=null)
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
myHolder.Add_Button.Click +=(o,e)=> {
mEmails[position].MyCount = mEmails[position].MyCount + 1;
myHolder.editText1.Text = mEmails[position].MyCount.ToString();
};
myHolder.reduce_Button.Click += (o, e) =>
{
mEmails[position].MyCount = mEmails[position].MyCount - 1;
myHolder.editText1.Text = mEmails[position].MyCount.ToString();
};
myHolder.mName.Text = mEmails[position].Name;
}