gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:10:35 24 4
gpt4 key购买 nike

为我需要能够从中删除的 ListView 设置客户适配器。 GetView 看起来像这样,包括我的 View 持有者的代码

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

但问题是,当我单击删除按钮时,它会在不同的位置触发多次,最终到达我从列表中删除项目并且位置值超出范围的位置,我得到一个异常.

从 ListView 中删除和删除项目的正确方法是什么?

最佳答案

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

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

}

关于c# - Xamarin Android ListView - 删除按钮多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com