我目前正在升级我的应用程序以使用最新版本的MvvmCross(5.1.1)。它之前使用的是4.2.3。
到目前为止,我遇到的唯一问题是使用从MvxListItemView派生的类。
在我的代码中,我有一个适用于我的CustomListItemView的适配器。在我的适配器的GetView覆盖中,我尝试将传入的视图转换为我的CustomListItemView类型,例如
public overrride View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView is CustomListItemView)
{
// do something
CustomListItemView myCustomListItemView = (CustomListItemView) convertView;
}
else
{
// do something else
}
}
我收到以下错误
Cannot convert type 'Android.Views.View' to 'MyNameSpace.CustomListItemView'
此外,如果我尝试在CustomListItemView中使用FindViewById,则说
'CustomListItemView' does not contain a definition for 'FindViewById'
这曾用于4.2.3
好像MvxListView不再是从View派生的 有什么想法吗?
答案 0 :(得分:0)
MvvmCross 5.x中的MvxListView,我认为4.x版晚期也使用了ViewHolder模式。所以MvxListViewItem已经从View变为ViewHolder。
因此,您不想夸大自己的观点等,而是想做类似的事情:
public class CustomAdapter : MvxAdapter
{
public CustomAdapter(Context context) : base(context)
{
}
public CustomAdapter(Context context, IMvxAndroidBindingContext bindingContext) : base(context, bindingContext)
{
}
public CustomAdapter(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
protected override View GetBindableView(View convertView, object dataContext, ViewGroup parent, int templateId)
{
if (dataContext is ViewModelA)
{
templateId = Resouce.Layout.item_a;
}
else if (dataContext is ViewModelB)
{
templateId = Resouce.Layout.item_b;
}
return base.GetBindableView(convertView, dataContext, parent, templateId);
}
}
如果base.GetBindableView
是错误的模板,内置的convertView
会处理剩下的事情,它会创建一个新的ViewHolder等。