C# Xamarin Android ListView-删除按钮多次触发

C# Xamarin Android ListView-删除按钮多次触发,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,为我需要能够从中删除的列表视图设置客户适配器。GetView看起来像这样,包括my view holder的代码 public override View GetView(int position, View convertView, ViewGroup parent) { var row = convertView; IngredientHolder holder = null; if (row == null) {

为我需要能够从中删除的列表视图设置客户适配器。GetView看起来像这样,包括my view holder的代码

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var row = convertView;
        IngredientHolder holder = null;

        if (row == null)
        {
            row = _context.LayoutInflater.Inflate(Resource.Layout.EditableIngredientListViewItem, null);
            holder = new IngredientHolder
            {
                IngredientName = row.FindViewById<EditText>(Resource.Id.editableIngredientNameTextView),
                Measurement = row.FindViewById<EditText>(Resource.Id.measurement),
                DeleteButton = row.FindViewById<ImageButton>(Resource.Id.delete_ingredient)
            };

            row.Tag = holder;
        }
        else
        {
            holder = row.Tag as IngredientHolder;
        }

        var ingredient = IngredientList[position];
        holder.Measurement.Text = ingredient.Measurement;
        holder.IngredientName.Text = ingredient.Name;
        holder.DeleteButton.Click += (sender, args) =>
        {
            IngredientList.RemoveAt(position);
            NotifyDataSetChanged();
        };

        return row;
    }

    private class IngredientHolder : Java.Lang.Object
    {
        public TextView IngredientName { get; set; }
        public TextView Measurement { get; set; }
        public ImageButton DeleteButton { get; set; }
    }
public override View GetView(int位置、视图转换视图、视图组父视图)
{
var行=convertView;
IngredientHolder=null;
if(行==null)
{
行=_context.LayoutInflater.Inflate(Resource.Layout.EditableIngredientListViewItem,null);
支架=新的支架
{
IngredientName=row.FindViewById(Resource.Id.editableIngredientNameTextView),
度量=行.findviewbyd(Resource.Id.Measurement),
DeleteButton=row.findviewbyd(Resource.Id.delete\u)
};
row.Tag=holder;
}
其他的
{
holder=行。标记为IngredientHolder;
}
var成分=IngCreditList[位置];
holder.Measurement.Text=成分.Measurement;
holder.IngreditName.Text=成分名称;
holder.DeleteButton.Click+=(发件人,参数)=>
{
InCreditList.RemoveAt(位置);
NotifyDataSetChanged();
};
返回行;
}
私有类IngreditionHolder:Java.Lang.Object
{
公共文本视图IngredientName{get;set;}
公共文本视图度量{get;set;}
公共图像按钮删除按钮{get;set;}
}
但问题是,当我单击一个删除按钮时,它会多次触发不同的位置,最终到达一个点,在该点上我已从列表中删除了项,并且位置的值超出范围,我得到一个异常


从列表视图中删除项目的正确方法是什么?

用下面的代码替换代码,这样它就不会调用很多次

if (! holder.DeleteButton.HasOnClickListeners)
{
 holder.DeleteButton.Click += (sender, args) =>
        {
            IngredientList.RemoveAt(holder.AdapterPosition);
            NotifyDataSetChanged();
        };

}