在Android (c#)中加载对象到ListView

本文关键字:加载 对象 ListView Android | 更新日期: 2023-09-27 17:54:50

我希望在Android中使用ListView来显示客户的详细信息,例如姓名,姓氏,地址等…

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

public class CustomerModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Netname { get; set; }
    public string Initials { get; set; }
}

我一直在寻找示例(Xamarin示例)如何将c#/Android中的集合绑定到ListView,用户可以点击查看有关Customer的进一步详细信息,但到目前为止我没有运气。

在我的c#应用程序中,我使用了ObservableCollectionDataGrid,但我正在努力在Android中找到一个可行的等效(我对Android完全陌生)。

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

在Android (c#)中加载对象到ListView

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

listView = FindViewById<ListView>(Resource.Id.List); // get reference to the ListView in the layout
// populate the listview with data
listView.Adapter = new HomeScreenAdapter(this, tableItems);
listView.ItemClick += OnListItemClick;  // to be defined

适配器类:

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;
   }
}
对于性能增强,请查看ViewHolder