Поведение адаптера при загрузке изображения из библиотеки URL ion

#java #android #adapter #ion

#java #Android #адаптер #android-ion

Вопрос:

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

На самом деле, у меня есть элементы со строкой, соответствующей URL-адресу иконического изображения, которое я хочу загрузить для каждого элемента в моем gridview.

Проблема связана с управлением представлением адаптера (повторное использование существующего представления, если я не ошибаюсь), и я не знаю, как это обойти…

Например, если я загружаю 10 элементов с изображением, в первый раз это работает. Затем, когда я прокручиваю вниз, а затем прокручиваю вверх, изображение изменяется (из-за повторного использования существующего представления …)

Можете ли вы мне помочь?

Это мой код адаптера :

 public class ProtocoleAdapter extends BaseAdapter {
    private Context context;
    private List<ProtocoleItem> mListe;

    public ProtocoleAdapter(Context context, List<ProtocoleItem> liste) {
        this.context = context;
        this.mListe = liste;
    }

    private class ViewHolder {
        TextView txtTitre;
        ImageView img;

    }

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater
                    .inflate(R.layout.grid_item, null);

            holder = new ViewHolder();

            holder.txtTitre = (TextView) convertView
                    .findViewById(R.id.grid_item_label);

            holder.img = (ImageView) convertView
                    .findViewById(R.id.grid_item_image);


            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final ProtocoleItem rowItem = mListe.get(position);


        boolean isLoaded = false;
        try {
            Bitmap bitmap = Ion.with(context)
                    .load(rowItem.getImage())
                    .asBitmap()
                    .get();

            isLoaded = true;

            holder.img.setImageBitmap(bitmap);

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        if (!isLoaded) {
            if (position % 5 == 0) {
                holder.img.setBackgroundColor(0xff176799);
            } else {
                if (position % 4 == 0) {
                    holder.img.setBackgroundColor(0xff2F87B0);
                } else {
                    if (position % 3 == 0) {
                        holder.img.setBackgroundColor(0xff42A4BB);
                    } else {
                        if (position % 2 == 0) {
                            holder.img.setBackgroundColor(0xff5BC0C4);
                        } else {
                            holder.img.setBackgroundColor(0xff78D6C7);
                        }
                    }
                }
            }
        }

        holder.txtTitre.setText(rowItem.getTitre());


        return convertView;
    }
  

Спасибо за все!

Хорошего дня

Ответ №1:

Получите последнюю версию Ion и используйте следующее.

 Ion.with(holder.img)
.load(rowItem.getImage());
  

Этот метод будет загружаться асинхронно.

Ваше текущее использование блокирует поток пользовательского интерфейса. Ion должен правильно обрабатывать переработку convertView, так что это не проблема.

Ответ №2:

Это проблема с отложенной загрузкой, используйте универсальный загрузчик изображений: https://github.com/nostra13/Android-Universal-Image-Loader
https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/sample/src/com/nostra13/example/universalimageloader/ImagePagerActivity.java

Комментарии:

1. Теперь, как это сделать с помощью библиотеки ion?

2. Я не знаю о библиотеке Ion, проблема, на которую вы ссылались, — это отложенная загрузка, и universal image loader — лучшее решение для нее.

3. На самом деле это не объективный ответ, но спасибо, я попробую это

4. Может ли кто-нибудь быть более понятным? Я не понимаю, почему отложенная загрузка убивает мой ListView ImageView x_x ‘

5. Это отлично работает с ion. Асинхронные отложенные загрузки были частью ion с версии v1. Он просто выполнял блокирующий вызов с помощью .get() .