在Android(C#)中将对象加载到列表视图中

在Android(C#)中将对象加载到列表视图中,c#,android,listview,C#,Android,Listview,我希望在Android中使用列表视图来显示客户的详细信息,例如名字、姓氏、地址等 我声明了一个对象,看起来像 public class CustomerModel { public int ID { get; set; } public string Name { get; set; } public string Netname { get; set; } public string Initials { get; set; } } 我一直在寻找如何将C#/A

我希望在Android中使用
列表视图
来显示客户的详细信息,例如名字、姓氏、地址等

我声明了一个对象,看起来像

public class CustomerModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Netname { get; set; }
    public string Initials { get; set; }
}
我一直在寻找如何将C#/Android中的集合绑定到
列表视图
的示例(),用户可以点击该列表视图查看有关该
客户
的更多详细信息,但到目前为止,我没有运气

在我的C#应用程序中,我使用了
ObservableCollection
DataGrid
,但我正在努力在Android中找到一个可行的等价物(我对Android完全陌生)


在我的Android应用程序中是否有一个等价物可以使用?

您需要创建一个扩展
BaseAdapter
的适配器来保存数据,并使用
getView
方法返回每一行,在该方法中,您可以将列表的每个值绑定到屏幕中的一个视图。示例来自:

listView=findviewbyd(Resource.Id.List);//获取对布局中ListView的引用
//用数据填充listview
Adapter=new HomeScreenAdapter(这是tableItems);
listView.ItemClick+=OnListItemClick;//待定义
适配器类:

public class HomeScreenAdapter : BaseAdapter<TableItem> 
{
   List<TableItem> items;
   Activity context;
   public HomeScreenAdapter(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) // no view to re-use, create new
           view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
       view.FindViewById<TextView>(Resource.Id.Text1).Text = item.Heading;
       view.FindViewById<TextView>(Resource.Id.Text2).Text = item.SubHeading;
       view.FindViewById<ImageView>(Resource.Id.Image).SetImageResource(item.ImageResourceId);
       return view;
   }
}
public class HomeScreenAdapter:BaseAdapter
{
清单项目;
活动语境;
公共家庭影院(活动背景、列表项目)
:base()
{
this.context=上下文;
这个项目=项目;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖表项此[int位置]
{
获取{返回项目[位置];}
}
公共覆盖整数计数
{
获取{return items.Count;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var项目=项目[位置];
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
视图=context.LayoutInflater.Inflate(Resource.Layout.CustomView,null);
view.findviewbyd(Resource.Id.Text1).Text=item.Heading;
view.FindViewById(Resource.Id.Text2).Text=item.SubHeading;
view.findviewbyd(Resource.Id.Image).SetImageResource(item.ImageResourceId);
返回视图;
}
}

对于性能增强,请查看您需要创建一个适配器,该适配器扩展
BaseAdapter
以保存数据,并使用
getView
方法返回每一行,在该方法中,您可以将列表的每个值绑定到屏幕中的一个视图。示例来自:

listView=findviewbyd(Resource.Id.List);//获取对布局中ListView的引用
//用数据填充listview
Adapter=new HomeScreenAdapter(这是tableItems);
listView.ItemClick+=OnListItemClick;//待定义
适配器类:

public class HomeScreenAdapter : BaseAdapter<TableItem> 
{
   List<TableItem> items;
   Activity context;
   public HomeScreenAdapter(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) // no view to re-use, create new
           view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
       view.FindViewById<TextView>(Resource.Id.Text1).Text = item.Heading;
       view.FindViewById<TextView>(Resource.Id.Text2).Text = item.SubHeading;
       view.FindViewById<ImageView>(Resource.Id.Image).SetImageResource(item.ImageResourceId);
       return view;
   }
}
public class HomeScreenAdapter:BaseAdapter
{
清单项目;
活动语境;
公共家庭影院(活动背景、列表项目)
:base()
{
this.context=上下文;
这个项目=项目;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖表项此[int位置]
{
获取{返回项目[位置];}
}
公共覆盖整数计数
{
获取{return items.Count;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var项目=项目[位置];
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
视图=context.LayoutInflater.Inflate(Resource.Layout.CustomView,null);
view.findviewbyd(Resource.Id.Text1).Text=item.Heading;
view.FindViewById(Resource.Id.Text2).Text=item.SubHeading;
view.findviewbyd(Resource.Id.Image).SetImageResource(item.ImageResourceId);
返回视图;
}
}

关于性能增强,请查看我在问题中标记的
C
——您是否有一个C而不是
Java
的示例?@CBreeze用C更新了示例。这是一样的,但有C#语法。我真的很感激,谢谢。我唯一不能理解的部分是
布局。CustomView
。我必须创建一个模拟一行的xml文件吗?@CBreeze除非您想在每行中只显示一行文本,否则您需要创建一个xml作为一行的模板。好的,最后一个问题,在您的示例中,有
CustomView
-我假设这是行模板。我已经创建了一个XML文件作为行(job_行)的模板,并完成了此操作-
view=\u context.LayoutInflater.Inflate(Resource.Layout.job_行,null)但是它只是说Resource.Layout不包含它。如何将XML文件链接为新行?在我的问题中,我已经标记了
C
——您是否有一个C而不是
Java
的示例?@CBreeze用C\example更新。这是一样的,但有C#语法。我真的很感激,谢谢。我唯一不能理解的部分是
布局。CustomView
。我必须创建一个模拟一行的xml文件吗?@CBreeze除非您想在每行中只显示一行文本,否则您需要创建一个xml作为一行的模板。好的,最后一个问题,在您的示例中,有
CustomView
-我假设这是行模板。我已经创建了一个XML文件作为行(job_行)的模板,并完成了此操作-
view=\u context.LayoutInflater.Inflate(Resource.Layout.job_行,null)但是它只是说Resource.Layout不包含它。如何将XML文件链接为新行?