如何有选择地使缓存的图库图像无效?

时间:2013-01-24 23:31:16

标签: android

我的Android应用程序中有一个gallery小部件,显示汽车的图像(它不是真正的汽车,但汽车就是一个例子)。画廊在画廊中展示了每个项目的汽车模型,因此我们可能会有一个类似的画廊:

  1. Ford Model T
  2. 保时捷911
  3. Ford Mustang
  4. 当用户长时间按下画廊中的某个项目时,他们可以为相关汽车选择一个新图像 - 因此,如果用户长时间按下Ford Mustang图像,他们会看到一个新的Ford Mustangs图片库,并且他们可以选择他们实际想要在主画廊中看到的图像(也许他们希望看到红色而不是黄色的图像)。

    这在代码中工作得很好 - 我只有一个整数数组,其中每个汽车模型的数组中都有一个int,每个int代表一个图像的索引。

    用户选择新图像,然后日志显示:

    MoreCarImagesGallery: User selected image 3 for car with ID 219 (Ford Mustang)
    MainGalleryAdapter: Setting selected image (3) for car at position 2
    

    然后adapter getView()执行:

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

    然而!当我回到主画廊时,之前显示的汽车图像仍在显示。但!当我向显示的汽车向左或向右滚动几个项目,然后滚动回到该汽车时,图像将更新为“新”(用户选择的)图像。

    很明显,画廊正在对我的适配器进行一些图像缓存。我可能希望这种情况继续发生,因为我认为画廊在没有缓存的慢速手机上会非常迟钝。

    如何使我的图库中的图像无效以强制我的适配器getView()返回“新”图像?

1 个答案:

答案 0 :(得分:1)

假设您实际更新了库适配器后面的数据,可以在更改数据后调用主库的适配器上的notifyDatasetChanged()。

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