我正在使用带有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);
}
答案 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。