我正在開發一個 xamarin.android 專案,我需要將組件串列鏈接到布局串列視圖以顯示此組件串列。經過一番研究,我發現要做到這一點,您需要某種配接器,并且似乎有很多代碼與創建配接器以在串列視圖中顯示某些串列相關。我知道在 xamarin.forms 中有一個 ListView 的 ItemsSource 屬性,它使生活更輕松,有沒有與 xamarin.android 中的類似的東西?我對這一切都很陌生,所以如果我遺漏了什么,我很抱歉。提前致謝!
uj5u.com熱心網友回復:
對于 Listview 中的簡單專案,您可以參考檔案
為此,您可以參考檔案Customizing a ListView's Appearance with Xamarin.Android。
步驟是:
1.在Activity布局中添加ListView
<ListView android:id="@ id/List"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#FFDAFF7F"
/>
2.創建自定義行布局
需要另一個 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.參考自定義行視圖
自定義配接器示例的實作在HomeScreenAdapter.cs. 關鍵方法是GetView它使用資源 ID 加載自定義 AXML Resource.Layout.CustomView,然后在回傳之前設定視圖中每個控制元件的屬性。顯示了完整的配接器類(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.在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 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/460038.html
