【问题标题】:Mono for Android: ListView Delete Items NotifyDataSet Changed适用于 Android 的 Mono:ListView 删除项目 NotifyDataSet 已更改
【发布时间】:2012-04-04 15:49:13
【问题描述】:

我正在尝试从列表视图中删除行。当我单击删除时,该行被删除。但是,ListView 无法更新。我必须单击后退按钮并回来查看已删除的项目。有没有办法在删除项目后刷新页面?这是我的代码:

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

【问题讨论】:

    标签: c# android for-loop mono xamarin.android


    【解决方案1】:

    即使您在存储库中删除它,该对象仍位于适配器中存储的订单列表中 (_orders)。在调用NotifyDataSetChanged()之前尝试从该列表中删除对象

    【讨论】:

    • 谢谢!那行得通。这是正确的代码: if (_orders.Contains(item)) { _orders.Remove(item); NotifyDataSetChanged(); OrderRepository orderRepo = new OrderRepository(); orderRepo.Delete(((Order)item).Id); } };
    【解决方案2】:

    更新列表视图

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

    【讨论】:

      【解决方案3】:

      尝试在您的 OrderHistoryAdapter 实例上调用 NotifyDataSetChanged()(或类似名称)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 2015-10-30
        • 2015-06-16
        相关资源
        最近更新 更多