【问题标题】:How to Use ArrayAdapter with Multiple Textview columns in listView Xamarin Android如何在 listView Xamarin Android 中使用具有多个 Textview 列的 ArrayAdapter
【发布时间】: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

帮助非常感谢 提前致谢

【问题讨论】:

    标签: c# android listview xamarin.android android-arrayadapter


    【解决方案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。如果您想在每个项目中显示多个视图,请改为创建自定义适配器。
    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多