2017-08-07 6 views
0

Je suis en train de mettre à jour mon application pour utiliser la dernière version de MvvmCross (5.1.1). Il utilisait précédemment 4.2.3.Migration MvxListItemView de MvvmCross 4.2.3 à 5.1.1

Le seul problème que j'ai rencontré jusqu'ici est avec une classe dérivée de MvxListItemView.

Dans mon code, j'ai un adaptateur pour mon CustomListItemView. Dans la dérogation GetView dans mon adaptateur je tente de lancer la vue adoptée en, à mon type CustomListItemView par exemple

public overrride View GetView(int position, View convertView, ViewGroup parent) 
{ 
    if (convertView is CustomListItemView) 
    { 
     // do something 
     CustomListItemView myCustomListItemView = (CustomListItemView) convertView; 
    } 
    else 
    { 
     // do something else 
    } 
} 

Je reçois l'erreur suivante

Cannot convert type 'Android.Views.View' to 'MyNameSpace.CustomListItemView' 

Aussi, si je tente d'utiliser findViewById dans mon CustomListItemView il dit

'CustomListItemView' does not contain a definition for 'FindViewById' 

Cette habitude de travailler dans 4.2.3

C'est comme si MvxListView n'était plus dérivé de View.
Des idées? Le MvxListView dans MvvmCross 5.x, je pense aussi des versions 4.x tard utilise le modèle ViewHolder

Répondre

0

MvxListViewItem est passé de View à ViewHolder.

Ainsi, au lieu de gonfler votre propre point de vue, etc, que vous voulez faire quelque chose comme ceci:

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

Le construit en base.GetBindableView ensuite prendre soin du reste, si le convertView est le mauvais modèle crée Un nouveau ViewHolder etc.

+0

Merci @Cheesebaron, je vais voir si je peux l'appliquer à mon application existante. – rideintothesun

+0

Désolé, je ne comprends toujours pas comment cela est censé fonctionner. Est-ce que je ne remplace plus GetView? Sinon je ne comprends pas pourquoi pas. Whay dois-je faire différemment lors de la création d'un MvxListItemView personnalisé. Existe-t-il un exemple d'utilisation du nouveau MvxListItemView que je pourrais suivre? – rideintothesun

+0

return new MvxListItemView (_context, _bindingContext.LayoutInflaterHolder, dataContext, templateId); Erreur de temps de compilation ici et attend ViewGroup? – GvSharma