1

У меня есть viewflipper, который содержит 3 ребенка, один GridView и два пользовательских ListView, каждый вид имеет другой адаптер, и каждый адаптер имеет загрузчик изображений с библиотекой Universal Image Loader.Отображение тех же изображений в разных списках с видом флиппера

Элементы одинаковы для всех адаптеров, моя цель - показать контент по-разному (сетка, список и большой список), но таким образом каждое изображение загружается 3 раза. Есть ли способ загрузить изображения один раз и показать их своим детям?

enter image description here

+0

Вы можете использовать библиотеки Glide или Picasso для кеша изображений. –

ответ

1

Для этого вам нужен объект, общий для трех видов, который управляет загрузкой изображений и хранит память. У вас есть: это Adapter. Используйте один и просто переключайте макеты.

Например, вы могли бы определить этот метод внутри адаптера:

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

Тогда в вашем методе getView() вы просто раздуть макет, определенный layoutResId.

+0

это хорошая идея, у меня есть 2 listview, которые являются одинаковыми, но адаптер gridview очень отличается, что об этом? –

+1

Это может потребовать некоторой работы, но это естественное решение вашей проблемы. Если вы не хотите, обратите внимание, что некоторые библиотеки (не знают о UIL) будут кэшировать растровые изображения, чтобы они не загружались дважды. Поиск вокруг кэширования в UIL (или других подобных библиотеках). – natario

+0

Я уже включил кеширование, но поскольку коды загрузчика изображений запускаются в одно и то же время в первый раз, он загружает изображения очень медленно, после кеширования все идет хорошо, возможно, мне нужно сделать один адаптер после всех –

0

Ну, что вы, кажется, спросить, если вы можете передать изображения вместе с другими адаптерами. Это было бы похоже на то, что если изображение не пустое, они используют его в других представлениях, если не использовать графический загрузчик.

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; 
} 

Предположительно, вы бы выбрали только один из этих видов, чтобы сохранить его. И затем проверьте их, чтобы увидеть, есть ли у констант изображение для отображения.