xamarin.android中是否有等价的ListView.ItemsSource?

Is there an equivalent of ListView.ItemsSource in xamarin.android?

我正在处理一个 xamarin.android 项目,我需要在其中 link 组件列表到布局列表视图以显示此组件列表。经过一些研究,我发现要做到这一点,您需要某种适配器,而且似乎有很多代码与创建适配器相关联以在列表视图中显示某些列表。 我知道在 xamarin.forms 中有一个 ListView 的 ItemsSource 属性 使生活更轻松,有没有与 xamarin.android 中类似的东西? 我对这一切都很陌生,所以如果我遗漏了什么,我很抱歉。提前致谢!

对于Listview中的简单项目,您可以参考文档Populating a Xamarin.Android ListView with data,就像Jason提到的那样。 显示的项目是简单的字符串列表。

如果你想自定义一个ListView的外观,如下图所示,可以参考文档Customizing a ListView's Appearance with Xamarin.Android

关于这个,你可以参考文档Customizing a ListView's Appearance with Xamarin.Android .

步骤是:

1.Adding ListView 到 Activity 布局

<ListView android:id="@+id/List"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:cacheColorHint="#FFDAFF7F"
/>

2.Creating 自定义行布局

需要另一个 AXML 布局文件来包含将出现在列表视图中的每一行的自定义布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:background="#FFDAFF7F"
   android:padding="8dp">
    <LinearLayout android:id="@+id/Text"
       android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:paddingLeft="10dip">
        <TextView
         android:id="@+id/Text1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="#FF7F3300"
         android:textSize="20dip"
         android:textStyle="italic"
         />
        <TextView
         android:id="@+id/Text2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textSize="14dip"
         android:textColor="#FF267F00"
         android:paddingLeft="100dip"
         />
    </LinearLayout>
    <ImageView
        android:id="@+id/Image"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:padding="5dp"
        android:src="@drawable/icon"
        android:layout_alignParentRight="true" />
</RelativeLayout >

3.Referencing 自定义行视图

自定义适配器示例的实现在 HomeScreenAdapter.cs 中。关键方法是 GetView,它使用资源 ID Resource.Layout.CustomView 加载自定义 AXML,然后在视图中的每个控件上设置属性,然后返回它。显示完整的适配器 class(TableItem 是项目型号):

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

4.Referencing Activity

中的自定义 ListView
ListView listView;

SetContentView(Resource.Layout.HomeScreen); // loads the HomeScreen.axml as this activity's 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

void OnListItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
   var listView = sender as ListView;
   var t = tableItems[e.Position];
   Android.Widget.Toast.MakeText(this, t.Heading, Android.Widget.ToastLength.Short).Show();
}

您可以在此处获取完整示例:https://github.com/xamarin/monodroid-samples/tree/main/CustomRowView .