3

キャストに問題があります。まず、Monodroid で MVVM を使用せずに AutoComplete 用のカスタム アダプターを作成する方法の例を示します。

これを MVVMCross で試してみますが、そのためには、ViewModel を Java.Lang.Object で拡張する必要があります。これにより、移植性が損なわれます。私は現在、回避策を探していますが、mvvm の専門家ではないため、助けが必要です。

https://github.com/BitStab/MvvmCross/tree/master/Cirrious/Cirrious.MvvmCross.Binding/Android/Viewsで見つけることができるように、mvvmCross Bindigs でいくつかの新しいクラスを開始しました

できるだけ汎用的にしようとしていますが、個人的な C# オブジェクトから Java.Lang.Object にキャストするメソッドが必要です。ViewModel を拡張せずにこれを行う方法はありますか? 誰かが別のアイデアを持っている場合は、インスピレーションを得て喜んでいます!

助けてくれてありがとう!

4

1 に答える 1

3

移植可能なコードが必要な場合は、ViewModel の近くに Java.anything を置きたくありません。

残念ながら、CustomerAdapter のサンプル コードを実際に追うことができませんでした。フィルター メソッドとパブリッシュ メソッドが正しくないようです。さらに、私が見つけた Java サンプルのほとんどに従って、いくつかの問題がありました。私が見たところ、AutoCompleteTextView のスレッド モデルは理想的ではないと思います。スレッドを長時間ブロックします (IMHO)。

ただし、Google Books API サンプルをハッキングした後、サンプルを作成しました。次のビデオを参照してください。

1 二 三

この例は、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 に組み込まれている現在のビューを使用するよりも、新しいオートコンプリート ビューを実装する方が良いかもしれないと私は信じています!

于 2012-05-12T00:35:30.510 に答える