Android 使用视图翻转器在不同列表中显示相同的图像

Android 使用视图翻转器在不同列表中显示相同的图像,android,android-adapter,android-image,viewflipper,android-adapterview,Android,Android Adapter,Android Image,Viewflipper,Android Adapterview,我有一个viewflipper,它包含3个孩子,一个GridView和两个自定义ListView,每个视图都有不同的适配器,每个适配器都有一个带有通用图像加载器库的图像加载器 所有适配器的项目都是相同的,我的目标是以不同的方式(网格、列表和大列表)显示内容,但这样每个图像加载3次。有没有办法一次加载图像并将其显示给孩子看 您似乎要问的是,是否可以将图像传递给其他适配器。如果图像不为空,则在其他视图中使用它,如果不为空,则使用图像加载器 public class Constants { p

我有一个viewflipper,它包含3个孩子,一个
GridView
和两个自定义
ListView
,每个视图都有不同的适配器,每个适配器都有一个带有通用图像加载器库的图像加载器

所有适配器的项目都是相同的,我的目标是以不同的方式(网格、列表和大列表)显示内容,但这样每个图像加载3次。有没有办法一次加载图像并将其显示给孩子看


您似乎要问的是,是否可以将图像传递给其他适配器。如果图像不为空,则在其他视图中使用它,如果不为空,则使用图像加载器

public class Constants {
    public static Constants INSTANCE = new Constants();
    public Constants() {
    }

    public Uri IMAGE_PATH = Uri.EMPTY;
    public File IMAGE_FILE = null;
    public Bitmap IMAGE = null;
}

您可能只会选择其中一种从视图中保存。然后检查它们,看看常量是否有一个图像供您显示。

因此您需要一个三个视图共用的对象,它管理图像加载并保存内存。你有了它:它是
适配器
。使用单个布局,只需切换布局即可

例如,您可以在适配器内定义此方法:

int layoutResId;
public void changeLayout(int layoutResId) {
    this.layoutResId = layoutResId;
    notifyDataSetChanged(); //force the adapter to call getView() again
}

然后,在您的
getView()
方法中,您只需膨胀
layoutResId
定义的布局,就可以使用Glide或Picasso库进行图像缓存。这是个好主意,我有两个相同的listview,但gridview适配器非常不同,这又如何呢?可能需要一些工作,但这是你问题的自然解决方案。如果您不想,请注意一些库(不知道UIL)将缓存位图,这样它们就不会被加载两次。在UIL(或其他类似的库)中搜索缓存。我已经启用了缓存,但是由于图像加载程序代码第一次在同一时间运行,所以加载图像的速度非常慢,在缓存一切正常后,可能我必须在allI理解后制作一个适配器。我想是的:-)