2015-02-12 1 views
0

У меня есть проект, который использует 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; 
     } 
+0

Почему вы прокомментировали 'DeleteButton.Tag' строку? –

+0

Предполагаю, что вы имеете в виду первый - под линией: DeleteButton = view.FindViewById

+0

см. Мой ответ, вероятно, поможет –

ответ

0

Это сработало в конце. Но я благодарю вас за комментарии и помощь.

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

       offerDeleteButton = view.FindViewById<Button> (Resource.Id.offerDeleteButton); 

       offerDeleteButton.Click += (object sender, EventArgs e) => 
       { 
        int delPos = (int)(((Button)sender).GetTag (Resource.Id.offerDeleteButton)); 

        items.RemoveAt (delPos); 

        string heading = item.Heading; 
        string subheading = item.SubHeading; 

        deleteItemFromParse(heading, subheading); 
        NotifyDataSetChanged(); 

       }; 
      } 

      else 
      { 
       offerDeleteButton = view.FindViewById<Button> (Resource.Id.offerDeleteButton); 


      } 

      offerDeleteButton.SetTag (Resource.Id.offerDeleteButton, 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); 



      return view; 
      }