移植可能なコードが必要な場合は、ViewModel の近くに Java.anything を置きたくありません。
残念ながら、CustomerAdapter のサンプル コードを実際に追うことができませんでした。フィルター メソッドとパブリッシュ メソッドが正しくないようです。さらに、私が見つけた Java サンプルのほとんどに従って、いくつかの問題がありました。私が見たところ、AutoCompleteTextView のスレッド モデルは理想的ではないと思います。スレッドを長時間ブロックします (IMHO)。
ただし、Google Books API サンプルをハッキングした後、サンプルを作成しました。次のビデオを参照してください。

この例は、MvvmCross フレームワーク内の新しいアルファデータバインディング オートコンプリート クラスとアダプターを使用して動作します。これらのクラスは、実際にはフルタイムのフレームワーク メンバーにならない可能性があります。その場合、代わりに何らかの外部ライブラリに存在する可能性があります。
基本機能は、3 つの新しいプロパティでデータバインディングを使用します。
- PartialText - 部分的なテキスト文字列で、View から ViewModel に送信されます
- ItemsSource - 提供された PartialText で使用可能な現在のアイテムのセットであり、ViewModel からビューに送信されます
- SelectedObject - 現在選択されている項目で、View から ViewModel に送信されます
これらのセットアップは、バインディング 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'}}"
/>
Android スレッド モデルのため、PartialText のすべての変更は、ItemsSource の最終的な通知された変更によって満たされることが不可欠であることに注意してください。これは、多数の小さな変更ではなく、オブジェクト コレクションの単一の変更である必要があります。
この最初のサンプルのコードは次の場所にあります: https://github.com/slodge/MvvmCross/tree/master/Sample%20-%20SimpleDialogBinding/SimpleBinding/DroidAutoComplete
このサンプルでは、完全な Mvx フレームワークではなく「シンプル バインディング」を使用しているため、ViewModel で懸念すべきスレッドがわずかに多くなることに注意してください。
バインディング ビューとそのアダプターは従うべき単純なコードではありません。バインディング コードは本質的にかなり抽象的です。しかし、それらは次の場所にあります。
ネットワークにリンクされた何かをしている場合、長期的には、Android に組み込まれている現在のビューを使用するよりも、新しいオートコンプリート ビューを実装する方が良いかもしれないと私は信じています!