如何正确实现 ReactiveUI ReactiveList with Xamarin.Android ListView with Customized ListView Layout

How to correctly implement ReactiveUI ReactiveList with Xamarin.Android ListView with Customized ListView Layout

我正在使用 Xamarin.Android 和 ReactiveUI,我正在尝试使用 ReactiveUI 实现 Custom 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;
            }
        }

主要Activity

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);
        }

在我看来,您应该使用 RecyclerView 而不是 ListView。在这种情况下,适配器可以将 ItemChanged 订阅到列表中的 add/remove/move 个项目。

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

我今天在这里分享了一个例子:

您可以使用 ReactiveListAdapter 并在构造函数中提供您的项目和创建视图的委托。这里的所有都是它的。

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