如何在 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&lt;T&gt; objects) 方法只能用于在 item 中显示一个 textView。如果您想在每个项目中显示多个视图,请改为创建自定义适配器。

以上是关于如何在 listView Xamarin Android 中使用具有多个 Textview 列的 ArrayAdapter的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单中将数组绑定到 ListView

在 Xamarin Forms iOS 中出现 ListView 之前,如何将 ListView 滚动位置设置为底部?

如何在 ListView Xamarin 上显示 System.Collection

Xamarin表单 - 如何使用标题生成iOS ListView本机分组样式?

如何选择项目 MVVM listview - Xamarin 表单

如何知道 ListView 中修改了哪个 Xamarin 表单条目?