如何在 listView Xamarin Android 中使用具有多个 Textview 列的 ArrayAdapter
Posted
技术标签:
【中文标题】如何在 listView Xamarin Android 中使用具有多个 Textview 列的 ArrayAdapter【英文标题】:How to Use ArrayAdapter with Multiple Textview columns in listView Xamarin Android 【发布时间】:2021-07-02 05:35:51 【问题描述】:我有 4 列的列表视图,例如 ItemLookupCode、Quantity、Description、Price
我正在添加完整代码,我在按钮单击时对列表进行排序。
我在跟随 Populate() 调用 4 textview 时遇到问题
protected override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.PriceCheckList);
List<string> list = new List<string>();
foreach (crItem item in listObject)
list.Add(item.ItemLookupCode);
list.Add(Convert.ToString(item.Quantity));
list.Add(item.Description);
list.Add(Convert.ToString(item.Price));
spacecrafts = list.ToArray();
this.InitializeViews();
this.SortData(ascending);
this.ascending = !ascending;
SortBtnItemLookupCode.Click += sortBtn_Click;
void sortBtn_Click(object sender, EventArgs e)
SortData(ascending);
this.ascending = !ascending;
private void InitializeViews()
listView = FindViewById<ListView>(Resource.Id.listView);
SortBtnItemLookupCode = FindViewById<Button>(Resource.Id.SortBtnItemLookupCode);
private void Populate()
ArrayAdapter adapter = new ArrayAdapter<string>(this, Resource.Layout.PriceCheckListTemplate, Resource.Id.lblItemLookupCode, spacecrafts);
listView.SetAdapter(adapter);
private void SortData(bool asc)
if (asc)
Array.Sort(spacecrafts);
else
Array.Reverse(spacecrafts);
Populate();
我想将以上 4 个对象分配给 Textview,但目前 ArrayAdapter 只接受一个 Textview,就像我在 Resource.Id.lblItemLookupCode 下面使用的一样,但是我如何将 4 个对象分配给 ArrayAdapter 中的 4 个列 Textview
帮助非常感谢 提前致谢
【问题讨论】:
【参考方案1】:尝试创建模型类为listView的项目定义数据,然后自定义一个自定义适配器来填充数据。
检查代码:
public class MainActivity : AppCompatActivity
protected override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
string[] items = new string[] "Vegetables", "Fruits", "Flower Buds", "Legumes", "Bulbs", "Tubers" ;
List<CustomModel> list = new List<CustomModel>();
//add data
CustomAdapter adapter = new CustomAdapter(list);
ListView listview_ = FindViewById<ListView>(Resource.Id.listview_);
listview_.SetAdapter(adapter);
public class CustomModel
public string Value1 get; set;
...
public class CustomAdapter : BaseAdapter<CustomModel>
List<CustomModel> list = new List<CustomModel>();
public _Adapter(List<CustomModel> list)
this.list = list;
public override CustomModel this[int position]
get
return list[position];
public override int Count
get
return list.Count;
public override long GetItemId(int position)
return position;
public override View GetView(int position, View convertView, ViewGroup parent)
var view = convertView;
view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.layout1, parent, false);
//specify value to the each textView
var textview = view.FindViewById<TextView>(Resource.Id.text_1);
textview.Text = list[position].Value1;
...
return view;
【讨论】:
我在以下方法中的问题。 private void Populate() ArrayAdapter 适配器 = new ArrayAdapter(this, Resource.Layout.PriceCheckListTemplate, Resource.Id.lblItemLookupCode, 航天器); listView.SetAdapter(适配器); //我这里有问题需要在ArrayAdapter中添加更多的textvew,比如Resource.Id.lblItemLookupCode,Resource.Id.lblDescription,Resource.Id.lblQty....,spacecrafts); ArrayAdapter 不支持接收多文本视图源。尝试创建自定义行布局并在 BaseAdapter 的GetView
方法中引用布局视图。查看文档:docs.microsoft.com/en-us/xamarin/android/user-interface/layouts/…
@Jarvan Zhang 解决方案不起作用我正在更新并在我的问题中添加完整代码。请检查并指导我谢谢
ArrayAdapter(Context context, int resource, int textViewResourceId, IList<T> objects)
方法只能用于在 item 中显示一个 textView。如果您想在每个项目中显示多个视图,请改为创建自定义适配器。以上是关于如何在 listView Xamarin Android 中使用具有多个 Textview 列的 ArrayAdapter的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin 表单中将数组绑定到 ListView
在 Xamarin Forms iOS 中出现 ListView 之前,如何将 ListView 滚动位置设置为底部?
如何在 ListView Xamarin 上显示 System.Collection
Xamarin表单 - 如何使用标题生成iOS ListView本机分组样式?