在Xamarin.Android中,哪一个小部件最适合显示包含数据的动态表?

在Xamarin.Android中,哪一个小部件最适合显示包含数据的动态表?,xamarin.android,Xamarin.android,我必须显示下表: 所以我想知道什么是用于表格的最佳小部件。我希望表格是动态的,我的意思是,如果我从下拉列表中选择其他组,表格中的项目数量将增加或减少,总价格将根据我在“价格”列中的内容而变化。哪个小部件是实现这一点的最佳小部件?是实现这一点的最佳UI控件。因为RecyclerView是适配器模式,所以您可以使用适配器实现您所说的动态功能 我希望表格是动态的,我的意思是,如果我从下拉列表中选择其他组,表格中的项目数量将增加或减少,总价格将根据我在“价格”列中的内容而变化 我为您制作了一个演示,您可

我必须显示下表:

所以我想知道什么是用于表格的最佳小部件。我希望表格是动态的,我的意思是,如果我从下拉列表中选择其他组,表格中的项目数量将增加或减少,总价格将根据我在“价格”列中的内容而变化。哪个小部件是实现这一点的最佳小部件?

是实现这一点的最佳UI控件。因为RecyclerView是适配器模式,所以您可以使用适配器实现您所说的动态功能

我希望表格是动态的,我的意思是,如果我从下拉列表中选择其他组,表格中的项目数量将增加或减少,总价格将根据我在“价格”列中的内容而变化

我为您制作了一个演示,您可以对其进行测试,并对您的项目进行一些更改:

三个.axml文件:

Main.axml:

项目布局,总价布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/item_tv"
        android:layout_width="match_parent"
        android:textSize="30dp"
        android:layout_height="wrap_content" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/foot_tv"
        android:gravity="end"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

在我的帖子中,我只想知道哪一个是最好的小部件,而不是怎么做。我是用另一种方法做的。谢谢你的帮助。你能分享你的方法吗?我还在做。完成后,我将粘贴代码。希望我不会忘记。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/foot_tv"
        android:gravity="end"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
using Android.App;
using Android.Widget;
using Android.OS;
using System;
using System.Collections.Generic;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Content;

namespace RecycleTest
{
    [Activity(Label = "RecycleTest", MainLauncher = true)]
    public class MainActivity : Activity
    {
        RecyclerView mRecyclerView;
        MyAdapter adapter;
        Button bt1, bt2, bt3;
        List<double> list1, list2, list3;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);
            initView();
            initData();

            mRecyclerView = FindViewById<RecyclerView>(Resource.Id.rv);
            mRecyclerView.SetLayoutManager(new LinearLayoutManager(this));
            adapter = new MyAdapter(this, list1);
            mRecyclerView.SetAdapter(adapter);
        }

        private void initData()
        {
            list1 = new List<double>();
            list2 = new List<double>();
            list3 = new List<double>();
            list1.Add(1.1);
            list1.Add(1.2);
            list1.Add(1.3);

            list2.Add(2.1);
            list2.Add(2.2);
            list2.Add(2.3);
            list2.Add(2.4);

            list3.Add(3.1);
            list3.Add(3.2);
            list3.Add(3.3);
            list3.Add(3.4);
            list3.Add(3.5);
        }

        public void initView() {
            bt1 = FindViewById<Button>(Resource.Id.bt1);
            bt2 = FindViewById<Button>(Resource.Id.bt2);
            bt3 = FindViewById<Button>(Resource.Id.bt3);

            bt1.Click += Bt1_Click;
            bt2.Click += Bt2_Click;
            bt3.Click += Bt3_Click;

        }

        private void Bt3_Click(object sender, System.EventArgs e)
        {
            adapter.change(list3);
        }

        private void Bt2_Click(object sender, System.EventArgs e)
        {
            adapter.change(list2);
        }

        private void Bt1_Click(object sender, System.EventArgs e)
        {
            adapter.change(list1);
        }
    }
    class MyViewHolder : RecyclerView.ViewHolder
    {
        public TextView mtv;
        public MyViewHolder(View itemView): base(itemView)
        {
            mtv = itemView.FindViewById<TextView>(Resource.Id.item_tv);
        }
    }

    class MyFootViewHolder : RecyclerView.ViewHolder
    {
        public TextView mtv;
        public MyFootViewHolder(View itemView):base(itemView)
        {
            mtv = itemView.FindViewById<TextView>(Resource.Id.foot_tv);
        }
    }


    class MyAdapter :RecyclerView.Adapter{

        Context mContext;
        List<double> mList=new List<double>();

        public override int ItemCount => mList.Count + 1;

        public MyAdapter(Context context, List<Double> list)
    {
        this.mContext = context;
        this.mList.AddRange(list);
    }

        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            if (GetItemViewType(position) == 0)
            {

                ((MyViewHolder)holder).mtv.Text=(mList[position].ToString());
            }
            else
            {
                double price = 0;
                for (int i = 0; i < mList.Count; i++)
                {
                    price += mList[i];
                }
              ((MyFootViewHolder)holder).mtv.Text=price + "";
            }
        }

        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            RecyclerView.ViewHolder holder;
            if (viewType == 0)
            {
                holder = new MyViewHolder(LayoutInflater.From(mContext).Inflate(Resource.Layout.item_layout, parent, false));
            }
            else
            {
                holder = new MyFootViewHolder(LayoutInflater.From(mContext).Inflate(Resource.Layout.foot_layout, parent, false));
            }
            return holder;
        }

        public override int GetItemViewType(int position)
        {
            int type;
            if (position != mList.Count)
            {
                type = 0;
            }
            else
            {
                type = 1;
            }
            return type;
        }

    public void change(List<Double> list1)
    {
        mList.Clear();
        mList.AddRange(list1);
        NotifyDataSetChanged();
    }


    }
}