У меня есть проект, который использует ListView для перечисления некоторых предложений. ListView заполняется адаптером ниже.Xamarin Android - удаление элемента из ListView удаляет два элемента
Недавно я добавил кнопку удаления элементам ListView, которые должны, очевидно, удалить элемент из списка. Все хорошо. Однако после того, как я удалю свой первый элемент успешно, в следующий раз, когда я нажму кнопку «Удалить» в одном из элементов списка ListView, он фактически удалит из этого списка два элемента.
Событие deleteButton.click похоже срабатывает дважды, во второй раз я пытаюсь удалить элемент из списка.
Вы можете видеть, что я играл с различными способами, чтобы попытаться заставить его работать с помощью различных кодов комментариев, которые у меня есть.
Помогите пожалуйста?
public class OffersAdapter : BaseAdapter<TableItem>
{
Button DeleteButton;
List<TableItem> items;
Activity context;
public OffersAdapter(Activity context, List<TableItem> items)
: base()
{
this.context = context;
this.items = items;
}
public override long GetItemId(int position)
{
return position;
}
public override TableItem this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
View view = convertView;
if (view == null)
{
view = context.LayoutInflater.Inflate (Resource.Layout.OffersLayoutItem, null);
}
// else
// {
// DeleteButton = view.FindViewById<Button> (Resource.Id.offerDeleteButton);
// //DeleteButton.SetTag (Resource.Id.deleteButton, position);
//
// }
view.FindViewById<TextView>(Resource.Id.Text1).Text = item.company;
view.FindViewById<TextView>(Resource.Id.Text2).Text = item.Heading;
view.FindViewById<TextView>(Resource.Id.Text3).Text = item.SubHeading;
view.FindViewById<ImageView> (Resource.Id.Image).SetImageBitmap (item.bitmapImage);
DeleteButton = view.FindViewById<Button> (Resource.Id.offerDeleteButton);
//DeleteButton.Tag = position;
//DeleteButton.SetTag (Resource.Id.deleteButton, position);
DeleteButton.Click += (object sender, EventArgs e) =>
{
DeleteButton.Tag = position;
Console.WriteLine("position clicked was " + position);
//int delPos = (int)(((Button)sender).GetTag (Resource.Id.offerDeleteButton));
items.RemoveAt (position);
string heading = item.Heading;
string subheading = item.SubHeading;
deleteItemFromParse(heading, subheading);
NotifyDataSetChanged();
};
return view;
}
Почему вы прокомментировали 'DeleteButton.Tag' строку? –
Предполагаю, что вы имеете в виду первый - под линией: DeleteButton = view.FindViewById
см. Мой ответ, вероятно, поможет –