如何在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

这是回收器视图中的项目,所以我想通过单击加号和减号按钮来增加和减少数量。如何在xamarin android中做到这一点

这是我的适配器

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;
}