Visual studio 在visual studio android sdk中,当适配器数据更改时更新列表视图

Visual studio 在visual studio android sdk中,当适配器数据更改时更新列表视图,visual-studio,listview,xamarin.android,android-arrayadapter,Visual Studio,Listview,Xamarin.android,Android Arrayadapter,当项目更改时,visual studio xamarine android sdk(本机UI)中带有适配器和项目集合的我的Listview不会得到更新。 我正在使用以下代码在VisualStudio xamarine中创建一个项目列表。它似乎是有效的,只是当一个项目被更改、添加或删除到集合中时,列表不会更新 我应该采取不同的方法吗?需要做什么才能使listview侦听项目更改 我的自定义适配器 public class TableItemAdapter : BaseAdapter<Tabl

当项目更改时,visual studio xamarine android sdk(本机UI)中带有适配器和项目集合的我的Listview不会得到更新。 我正在使用以下代码在VisualStudio xamarine中创建一个项目列表。它似乎是有效的,只是当一个项目被更改、添加或删除到集合中时,列表不会更新

我应该采取不同的方法吗?需要做什么才能使listview侦听项目更改

我的自定义适配器

public class TableItemAdapter : BaseAdapter<Table>
{
    List<Table> items;
    Activity context;

    public TableItemAdapter(Activity context, IEnumerable<Table> items) : base() {
        this.context = context;
        this.items = items.ToList();
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;        // re-use an existing view, if one is available
        if (view == null)               // otherwise create a new one
            view = context.LayoutInflater.Inflate(Resource.Layout.TableListItem, null);

        var tableName = view.FindViewById<TextView>(Resource.Id.tvTableName);
        tableName.Text = items[position].TABLE_NAME;
        tableName.SetTextColor(items[position].tableColor);

        view.FindViewById<TextView>(Resource.Id.tvTableDetail).Text = items[position].Rest;
        return view;
    }

    public override long GetItemId(int position) { return position; }
    public override Table this[int position] { get { return items[position]; } }
    public override int Count { get { return items.Count; } }
}
public class TableItemAdapter : BaseAdapter<Table>
{
    List<Table> items;
    ...
    public void Update(IEnumerable<Table> tables)
    {
        items.Clear();
        items.AddRange(aItems);
        NotifyDataSetChanged();
    }
}
公共类TableItemAdapter:BaseAdapter
{
清单项目;
活动语境;
公共TableItemAdapter(活动上下文,IEnumerable项):base(){
this.context=上下文;
this.items=items.ToList();
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
View=convertView;//如果现有视图可用,则重新使用该视图
if(view==null)//否则创建一个新的
视图=context.LayoutInflater.Inflate(Resource.Layout.TableListItem,null);
var tableName=view.findviewbyd(Resource.Id.tvTableName);
tableName.Text=项目[位置]。表名称;
tableName.SetTextColor(项目[位置].tableColor);
view.findviewbyd(Resource.Id.tvTableDetail).Text=items[position].Rest;
返回视图;
}
公共重写长GetItemId(int位置){return position;}
公共重写表this[int position]{get{return items[position];}
公共重写int Count{get{return items.Count;}}
}
TableListItem.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:padding="10dp" >

<TextView 
    android:id="@+id/tvTableName"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:textSize="20sp" />

<TextView 
    android:id="@+id/tvTableDetail"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/tvTableName"
    android:gravity="right"/>

</RelativeLayout>

c#

私有ObservableCollection表=新ObservableCollection();
使用对象(表)填充表;//将项目添加到集合
listView=findviewbyd(Resource.Id.lvTables);
var lvAdapter=新的TableItemAdapter(这是表);
Adapter=lvAdapter;
//添加或更改表时,listview不会发生任何变化
Add(newtable(){Name=“Table A1”});

NotifyDataSetChanged
listView.listSource
等似乎不是我所需要的xamarine android sdk。

问题在于
实例(在c部分)是一个得到更新的,但是
TableItemAdapter
在内部保留一个单独的
列表
,而该列表应该得到更新

然后
NotifyDataSetChanged()
就可以工作了!所以

我的自定义适配器

public class TableItemAdapter : BaseAdapter<Table>
{
    List<Table> items;
    Activity context;

    public TableItemAdapter(Activity context, IEnumerable<Table> items) : base() {
        this.context = context;
        this.items = items.ToList();
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;        // re-use an existing view, if one is available
        if (view == null)               // otherwise create a new one
            view = context.LayoutInflater.Inflate(Resource.Layout.TableListItem, null);

        var tableName = view.FindViewById<TextView>(Resource.Id.tvTableName);
        tableName.Text = items[position].TABLE_NAME;
        tableName.SetTextColor(items[position].tableColor);

        view.FindViewById<TextView>(Resource.Id.tvTableDetail).Text = items[position].Rest;
        return view;
    }

    public override long GetItemId(int position) { return position; }
    public override Table this[int position] { get { return items[position]; } }
    public override int Count { get { return items.Count; } }
}
public class TableItemAdapter : BaseAdapter<Table>
{
    List<Table> items;
    ...
    public void Update(IEnumerable<Table> tables)
    {
        items.Clear();
        items.AddRange(aItems);
        NotifyDataSetChanged();
    }
}
公共类TableItemAdapter:BaseAdapter
{
清单项目;
...
公共void更新(IEnumerable表)
{
items.Clear();
items.AddRange(aItems);
NotifyDataSetChanged();
}
}
c#

。。。
Add(newtable(){Name=“Table A1”});
lvAdapter.Update(表)//