2012-05-11 1 views
2

J'ai un problème avec les castings. d'abord, je vais donner un exemple comment faire un adaptateur personnalisé pour saisie semi-automatique sans MVVM dans MonoDroid: https://github.com/BitStab/Monodroid-Custom-Auto-Complete/blob/master/MonoAndroidApplication1/CustomerAdapter.csSaisie semi-automatique MVVM et Java Castings sans utiliser Java.Lang.Object sur ViewModel

Maintenant, je vais essayer dans MVVMCross, mais de le faire, je dois prolonger mon ViewModel par java.lang. Objet. Cela détruirait la portabilité de celui-ci. Je cherche maintenant une solution de contournement et parce que je ne suis pas un expert sur mvvm j'ai besoin d'aide.

j'ai commencé à faire quelques nouvelles classes dans le mvvmCross Bindigs, comme vous pouvez le trouver ici: https://github.com/BitStab/MvvmCross/tree/master/Cirrious/Cirrious.MvvmCross.Binding/Android/Views

Je suis en train de le rendre aussi générique que possible, mais je besoin d'une méthode pour lancer de mon personnel Objet C# à Java.Lang.Object. Existe-t-il une méthode pour cela sans étendre mon ViewModel? Si quelqu'un a une autre idée, je serais heureux de trouver l'inspiration!

Merci pour l'aide!

Répondre

2

Si vous voulez du code portable, vous ne voulez certainement pas avoir Java.quelque chose près de vos ViewModels. Je crains de ne pas pouvoir vraiment suivre le code de l'exemple CustomerAdapter: vos méthodes de filtrage et de publication ne semblent pas très correctes. En outre, j'ai eu quelques problèmes en suivant la plupart des exemples de Java que j'ai trouvés - d'après ce que j'ai vu, je ne pense pas que le modèle de thread sur AutoCompleteTextView soit idéal - il bloque trop longtemps un thread (IMHO).

Cependant, après quelques bidouillages sur un échantillon de l'API Google Books, je créé un échantillon - voir la vidéo à:

OneTwoThree

Cette exemple fonctionne avec un nouveau alpha classe de remplissage automatique et adaptateur dans le cadre MvvmCross rk. Il se peut que ces classes ne fassent jamais l'objet d'une charpente à temps plein - dans ce cas, elles peuvent vivre dans une bibliothèque externe à la place.

La fonctionnalité de base utilise la liaison de données sur 3 nouvelles propriétés:

  • PartialText - qui est une chaîne de texte partielle - envoyé par la vue à la ViewModel
  • ItemsSource - qui est l'ensemble des éléments actuellement disponibles pour le PartialText fourni - envoyé par le ViewModel à la vue
  • selectedObject - qui est l'objet actuellement sélectionné - envoyé par la vue de la ViewModel

Vous pouvez voir ces configuration dans la liaison XML:

<Mvx.MvxBindableAutoCompleteTextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    local:MvxItemTemplate="@layout/listitem_book" 
    local:MvxBind="{'Text':{'Path':'EnteredText','Mode':'TwoWay'}, 
    'ItemsSource':{'Path':'AutoCompleteSuggestions'}, 
    'PartialText':{'Path':'CurrentTextHint'}, 
    'SelectedObject':{'Path':'CurrentBook'}}" 
    /> 

Notez qu'en raison du modèle de thread Android, il est essentiel que chaque changement de PartialText est satisfaite par un éventuel changement signalé dans ItemsSource - et cela devrait être changement unique dans la collection d'objets plutôt que beaucoup de petits changements.

Le code pour cet échantillon initial est en: https://github.com/slodge/MvvmCross/tree/master/Sample%20-%20SimpleDialogBinding/SimpleBinding/DroidAutoComplete

Notez que cet exemple utilise « simple liaison » plutôt que le plein cadre MVX et en conséquence il y a un peu plus à se soucier de filetage dans le ViewModel.

La vue de liaison et son adaptateur sont le code pas simple à suivre - le code de liaison est assez abstrait dans la nature - mais ils peuvent être trouvés dans:


Si vous faites quelque chose lié au réseau puis à long terme, je crois qu'il peut être préférable d'implémenter une nouvelle vue de saisie semi-automatique plutôt que de utiliser le construit dans Android aujourd'hui!

+1

Cher SO - désolé pour cette réponse mais c'est 01h40 vendredi soir et il pourrait me falloir tout le week-end pour expliquer comment fonctionne cette liaison de données! – Stuart