1

MVVMCross の Android アプリでお気に入りの車のリストを作成しています。私の問題は、そのリストに画像を動的にロードすることです。私のポイントは、車ごとの ImageView が、コンバーターが取得して BitmapDrawable オブジェクトを返す画像の ID を取得していることです。Windows Phone アプリでは動作していますが、Android では少し問題があります。コードは次のようになります。

<LinearLayout
      android:id="@+id/PeoplePanel"
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:background="@color/transparent"
      android:layout_below="@id/TitleTextView"
      android:paddingTop="3dip"
      android:paddingLeft="10dip">
    <ImageView
        android:id="@+id/imagePhoto"
        android:layout_width="70dp"
        android:layout_height="70dp"
        local:MvxBind="{'ResourcesImagePath':{'Path':'Item.Obj.IDZdjeciaGlownego', 'Converter':'ByteToImg'}}"/>

コンバーターは次のとおりです。

public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                var id = (int?)value;
                if (id != null)
                {
                    var Service = this.GetService<IKomisSamService>();
                    var img = Service.GetImage((int)id);
                    try
                    {                
                        var drawable = BitmapFactory.DecodeByteArray(img, 0, img.Length);
                        return new BitmapDrawable(drawable);
                    }
                    catch { }
                }
                return null;

..そして出力:

04-12 11:13:06.034 I/MvxBind (  856): 135.42 Failed to create target binding for from Item.Obj.IDZdjeciaGlownego to ResourcesImagePath
MvxBind:Warning:135.42 Failed to create target binding for from Item.Obj.IDZdjeciaGlownego to ResourcesImagePath
04-12 11:13:06.034 I/mono-stdout(  856): MvxBind:Warning:135.42 Failed to create target binding for from Item.Obj.IDZdjeciaGlownego to ResourcesImagePath
04-12 11:13:06.644 D/dalvikvm(  856): GC_EXTERNAL_ALLOC freed 1850 objects / 93880 bytes in 48ms

コンバーターは 2 回実行されています。1 回目はサービスに項目を取得するよう要求し、2 回目はダウンロード時にそれを取得して BitmapDrawable オブジェクトを返します。

私の問題はMvxBindにあると思います.ResourcesImagePathを使用すべきではありませんが、彼のパスではなくBitmapDrawableオブジェクトを取得する他のものを使用する必要があります. 前もって感謝します!

4

1 に答える 1

2

一般に:

  • MvvmCross には、アセットおよび 内ImageViewのリソースからの画像を表示するための「組み込み」バインディングがあります。
  • これMvxImageViewにより、ダウンロードした画像の表示が非常に簡単にImageUrlなります。DownloadCache プラグインと File プラグインがロードされていることを確認するだけです。
  • Byte[]v3 では、 s内で表示できる既製のバインディングもありますImageView(これは PictureChooser プラグインにあります)。

ただし、独自のバインディングを追加する一般的なケースでは、必要に応じて自分でこれを行うことができます...

ResourcesImagePathしかし、値コンバーターを発明して使用するだけでは、これを行うことはできません。AnImageViewにはResourcesImagePathプロパティがないため、この場合、Mvx システムにはバインドする対象がありません。

その代わり:

  1. 次のようなクラスを使用してバインド操作を定義する必要があります

  2. そして、(あなたの中にSetup)そのバインディングの使用方法についてmvvmcrossに伝える必要があります-たとえば、次の63行目のように:https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Binding.Droid /MvxAndroidBindingBuilder.cs#L63

これを行うことを「カスタム バインディングの作成」と呼びます


:「コンバーターが2回実行されている」について完全にはわかりません-これが何を意味するのかわかりません(別の問題のように聞こえます)


重要な注意 - ビットマップのメモリ リークを避けるために、動的にロードするすべてのビットマップに InPurgeable を使用してください。

于 2013-04-12T11:55:40.750 に答える