如何正确实现 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。
我正在使用 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。