2012-04-04 1 views
4

Я пытаюсь удалить строки из списка. Когда я нажимаю delete, строка удаляется. Однако ListView не обновляется. Я должен нажать кнопку «Назад» и вернуться, чтобы удалить элемент. Есть ли способ обновить страницу после удаления элемента? Вот мой код:Mono для Android: ListView Удалить элементы NotifyDataSet Changed

public class OrderHistoryAdapter : BaseAdapter 
{ 
    private List<Order> _orders; 
    private Activity _context; 


    public OrderHistoryAdapter(Activity context, List<Order> orders) 
    { 
     _context = context; 
     _orders = orders; 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     var item = _orders.ElementAt(position); 

     var view = (convertView ?? 
       this._context.LayoutInflater.Inflate(
       Resource.Layout.OrderHistoryDetailsRow, 
       parent, 
       false)) as RelativeLayout; 




     TextView orderHistoryText = view.FindViewById<TextView>(Resource.Id.orderHistoryText); 
     orderHistoryText.Text = ((Order)item).Date.ToShortDateString(); 
     view.FindViewById<TextView>(Resource.Id.btnDeleteOrder).Click += delegate 
     { 
      OrderRepository orderRepo = new OrderRepository(); 
      orderRepo.Delete(((Order)item).Id); 
      //Item has been deleted, yet list fails to update 
      NotifyDataSetChanged(); 
     }; 


     //Finally return the view 
     return view; 
    } 


    public override int Count 
    { 
     get { return _orders.Count(); } 
    } 

    public Order GetOrder(int position) 
    { 
     return _orders.ElementAt(position); 
    } 

    public override Java.Lang.Object GetItem(int position) 
    { 
     return null; 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 
} 

ответ

2

Даже если вы удаляете его в репозитории, объект все еще находится в списке заказов, хранящихся в адаптере (_orders). Попробуйте удалить объект из этого списка, прежде чем называть NotifyDataSetChanged()

+0

Спасибо! Это сработало. Вот правильный код: if (_orders.Contains (item)) { _orders.Remove (item); NotifyDataSetChanged(); OrderRepository orderRepo = новый OrderRepository(); orderRepo.Delete (((Заказ) item) .Id); } }; –

0

Попытка вызвать NotifyDataSetChanged() (или что-то подобное) на вашем OrderHistoryAdapter инстанции.

1

Для обновления ListView

private ListView lvAnuncios= null; 

    .... 
    { 
     this.lvAnuncios = this.FindViewById<ListView>(Resource.Id.MisAnuncios_lvAnuncios); 
    } 

    private void ReloadListView() 
    { 
     if (this.lvAnuncios.Adapter == null) 
     { 
      this.lvAnuncios.Adapter = new adAnuncio(this, Resource.Layout.FilaListViewAnuncio, csVariable.objUsr.lstAnuncios); 
     } 
     else 
     { 
      ((BaseAdapter)this.lvAnuncios.Adapter).NotifyDataSetChanged(); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^