如何使用带有自定义ListView布局的Xamarin.Android ListView正确实现ReactiveUI ReactiveList

时间:2017-11-28 10:12:01

标签: listview xamarin.android reactiveui

我正在使用带有ReactiveUI的Xamarin.Android,我正在尝试使用ReactiveUI实现自定义ListView

有没有办法将数据绑定到自定义实现的控件,如 ListView 中的EditTexts,TextViews,就像通过ListView Adopter进行充气并设置onClickListner一样?

我已经看到了使用较少示例的概念和ReactiveListAdopter这样的文档可以使用吗?

采用者

public class OutletScreenAdopter : BaseAdapter<OutletModel>
        {
            List<OutletModel> items;
            Activity context;
            public OutletScreenAdopter(Activity context, List<OutletModel> items) : base()
            {
                this.context = context;
                this.items = items;
            }
            public override long GetItemId(int position)
            {
                return position;
            }
            public override OutletModel 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.ViewCell_OutletBasic, null);
                view.FindViewById<TextView>(Resource.Id.ViewCellOutletTxtOutletTitle).Text = item.OutletName;
                view.FindViewById<TextView>(Resource.Id.ViewCellOutletTxtOutletCode).Text = item.OutletCode;

                return view;
            }
        }

主要活动

ReactiveList<OutletListResult> OutletListItems;
public ListView OutletListViewMain { get; private set; }
....

public void SetupReactiveLists(Activity context)
        {
            List<OutletModel> items = new List<OutletModel>();

            foreach (var item in OutletListItems)
            {
                OutletModel outlet = new OutletModel
                {
                    OutletName = item.OutletName,
                    OutletCode = item.OutletCode
                };

                items.Add(outlet);
            }

            OutletListViewMain.Adapter = new OutletScreenAdopter(context, items);
        }

2 个答案:

答案 0 :(得分:2)

从我的角度来看,你应该使用RecyclerView而不是ListView。在这种情况下,适配器可以订阅ItemChanged来添加/删除/移动列表中的项目。

我做了一些可以(我的事情)重复使用的东西:https://github.com/Ideine/Xmf2/blob/develop-rx/src/Xmf2.Rx.Droid/ListElement/BaseReactiveRecyclerViewAdapter.cs

答案 1 :(得分:1)

我今天在这里分享了一个例子:https://stackoverflow.com/a/47527601/2782141

您可以使用ReactiveListAdapter并在构造函数中提供您的项目和创建视图的委托。这就是它的全部内容。

但正如Julien Mialon所说,性能和可用性方面,最好切换到RecyclerView。