如何在Monodroid中向listview动态添加项

如何在Monodroid中向listview动态添加项,listview,exception,xamarin.android,Listview,Exception,Xamarin.android,我正在编写一个活动,用户必须能够通过单击“添加信息”按钮(在屏幕顶部)将项目(带有代码和描述的类)动态添加到listview。最初,listview是空的。我创建了一个自定义视图(RowItem.axml),它将在适配器GetView()调用中膨胀,以显示特定行的相关信息。问题出现在[add info]中。单击事件,我必须在其中将新项目添加到列表中: 代码如下所示: void button_Click( object sender, EventArgs e ) { A

我正在编写一个活动,用户必须能够通过单击“添加信息”按钮(在屏幕顶部)将项目(带有代码和描述的类)动态添加到listview。最初,listview是空的。我创建了一个自定义视图(RowItem.axml),它将在适配器GetView()调用中膨胀,以显示特定行的相关信息。问题出现在[add info]中。单击事件,我必须在其中将新项目添加到列表中: 代码如下所示:

    void button_Click( object sender, EventArgs e )
    {
      AddNewItemToListView( listview.count);
    }
    void AddNewItemToListView(int count)
    {
       DataItem item = new DataItem();
       item.Code = FindCode(count);
       item.Description = FindDescription(count);

       listview_adapter.Add( item ); // !!  HERE AN EXCEPTION IS THROWN: --> Java.Lang.UnsupportedOperationException: 
       listAdapter.NotifyDataSetChanged();
    }
public class MyAdapter : BaseAdapter<DataItem>
{
    private readonly List<DataItem> _items = new List<DataItem>();

    // Constructor if you need to set up other stuff.

    public void Add(DataItem item)
    {
        _items.Add(item);
        NotifyDataSetChanged();
    }

    // Overrides for GetItemId, GetView, Count, this[]
}
下面是数据项的定义:

public class DataItem
{
  public string Code {get;set;}
  public string Description {get;set;}
}
下面是我的自定义适配器的定义:

public class MyListAdapter: ArrayAdapter<DataItem>
{
  // override code here (ex: GetView(..) ... )

请向正确的方向提供帮助,我们将不胜感激。非常感谢。

使用BaseAdapter而不是ArrayAdapter。它让您可以自由地使用一个良好的数据结构,如
列表
作为内部数据存储

您要做的是在适配器上实现您的
Add(T项)
方法,该方法调用列表的
Add(T项)
,然后调用适配器的
NotifyDataSetChanged()
方法。这将指示适配器的列表视图刷新自身

退房。这是很久以前的事了,但是代码用于设置带有自定义视图的列表。您只需实现如下内容的
Add(T项)

    void button_Click( object sender, EventArgs e )
    {
      AddNewItemToListView( listview.count);
    }
    void AddNewItemToListView(int count)
    {
       DataItem item = new DataItem();
       item.Code = FindCode(count);
       item.Description = FindDescription(count);

       listview_adapter.Add( item ); // !!  HERE AN EXCEPTION IS THROWN: --> Java.Lang.UnsupportedOperationException: 
       listAdapter.NotifyDataSetChanged();
    }
public class MyAdapter : BaseAdapter<DataItem>
{
    private readonly List<DataItem> _items = new List<DataItem>();

    // Constructor if you need to set up other stuff.

    public void Add(DataItem item)
    {
        _items.Add(item);
        NotifyDataSetChanged();
    }

    // Overrides for GetItemId, GetView, Count, this[]
}
公共类MyAdapter:BaseAdapter
{
私有只读列表_items=new List();
//构造函数,如果您需要设置其他内容。
公共作废添加(数据项)
{
_项目。添加(项目);
NotifyDataSetChanged();
}
//覆盖GetItemId、GetView、Count和this[]
}

非常感谢您的回答,先生。我会试试,让你知道它是怎么做的。很抱歉这么晚才答复…还有很多项目要赶。但谢谢你的解决方案。它确实起作用了!!非常感谢。