0

私の Android アプリケーションには、車の画像を表示するギャラリーウィジェットがあります (実際には車ではありませんが、例として車が機能します)。ギャラリーには、ギャラリー内のアイテムごとに 1 つのモデルの車が表示されるため、次のようなギャラリーがあるとします。

  1. フォード モデル T
  2. ポルシェ911
  3. フォード・マスタング

ユーザーがギャラリー内のアイテムを長押しすると、問題の車の新しい画像を選択できます。つまり、ユーザーがフォード マスタングの画像を長押しすると、フォード マスタングの写真の新しいギャラリーが表示されます。メイン ギャラリーで実際に見たい画像を選択します (黄色の画像ではなく、赤色の画像を表示したい場合があります)。

これはコードでうまく機能しています — 私は単に int の配列を持っています。この配列には車のモデルごとに 1 つの int があり、各 int は画像のインデックスを表しています。

ユーザーが新しい画像を選択すると、ログに次のように表示されます。

MoreCarImagesGallery: ユーザーが選択した ID 219 の車の画像 3 (Ford Mustang)
MainGalleryAdapter: 選択した画像 (3) を車の位置 2 に設定

次に、アダプターgetView() は次のことを行います。

Image img = imageLookup.getImageForCar(car.id, selectedImageIndexes[position]);

でも!メイン ギャラリーに戻ると、問題の車の以前に表示された画像がまだ表示されています。しかし!表示されている車から左または右にいくつかのアイテムをスクロールしてから、その車に戻ると、画像が「新しい」(ユーザーが選択した) 画像に更新されます。

明らかに、ギャラリーはアダプターからの画像のキャッシュを行っています。キャッシングを行わないと、低速の携帯電話ではギャラリーが非常に遅くなると思うので、おそらくそれが起こり続けることを望んでいます.

アダプタ getView() が「新しい」画像を返すように強制するために、ギャラリー内の画像を無効にするにはどうすればよいですか?

4

1 に答える 1

1

ギャラリー アダプターの背後にあるデータを実際に更新したと仮定すると、データを変更した後、メイン ギャラリーのアダプターで notifyDatasetChanged() を呼び出すことができます。

http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged ()

于 2013-01-24T23:34:03.133 に答える