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 à:
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!
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