как установить путь к локальному хранилищу изображений в ListView в Android

введите здесь описание изображения

Мой код адаптера CustomList...

закрытый конечный контекст Activity;

private List<String> list;

public CustomListAdapter(Activity context, List<String> list) {
    super(context, R.layout.list_single);

    this.context = context;
    this.list = list;
}

@Override
public View getView(int position, View view, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.list_single, null, true);
    TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);


    if (list != null) {
        for (int i = 0; i < list.size(); i++) {

            File imgFile = new File(list.get(i));

            if (imgFile.exists()) {

                ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
                Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                imageView.setImageBitmap(myBitmap);
            }
        }
    }

    return rowView;
}

@Override
public int getCount() {
    return list.size();
}

}

Я получаю список imagePath, например

d: Путь к массиву/хранилище/sdcard/DCIM/Camera/IMG_20170210_163055.jpg

d: Путь к массиву/хранилище/sdcard/DCIM/Camera/IMG_20170210_163037.jpg

d: Путь к массиву/хранилище/sdcard/DCIM/Camera/IMG_20170217_175804.jpg

d: Путь к массиву/хранилище/sdcard/DCIM/Camera/IMG_20170217_175802.jpg

d: Путь к массиву/хранилище/sdcard/DCIM/Camera/IMG_20170210_163056.jpg

Теперь я хочу показать эти пути в виде списка либо с помощью пользовательского адаптера, либо с помощью ArrayAdapter.


person Kuldeep Singh    schedule 17.04.2017    source источник


Ответы (1)


Допустим, вы отправляете список путей ArrayList на свой собственный адаптер. Теперь в методе getView() пользовательского адаптера добавьте следующее:

File imgFile = new  File(myList.get(position));

if(imgFile.exists()){

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

    ImageView myImage = (ImageView) convertView.findViewById(R.id.imageviewTest);
    //the imageview of your custom list item

    myImage.setImageBitmap(myBitmap);

}

Дайте мне знать, если вам нужна помощь с пользовательским адаптером

ПРИМЕЧАНИЕ. Если у вас много изображений, я бы посоветовал вам использовать такую ​​библиотеку, как Пикассо или Glide

Не используйте цикл for внутри getview. GetView сам вызывается каждый раз при создании строки.

View rowView = inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);


if (list != null) {

        File imgFile = new File(list.get(position));

        if (imgFile.exists()) {

            ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            imageView.setImageBitmap(myBitmap);
        }
}
return rowView;
person Nirup Iyer    schedule 17.04.2017
comment
Меня устраивает. по крайней мере, теперь я могу видеть изображение, но я постоянно получаю последнее изображение в listView. - person Kuldeep Singh; 17.04.2017
comment
@Niprup Спасибо, теперь все идеально, я использовал look, чтобы заполнить этот список коллекции для представления списка, что было неправильной логикой, можете ли вы указать, почему это была неправильная концепция. - person Kuldeep Singh; 17.04.2017
comment
У каждого адаптера есть метод getView(). Когда списку нужно заполнить строки, он вызывает метод getView. Метод getView в вашем случае раздувает макет list_single в представление, устанавливает текстовое представление и изображение и возвращает увеличенное представление. Теперь listview будет вставлять это раздутое представление в виде строки. Что вы делали, так это то, что вы зацикливались внутри getView, поэтому для каждой строки повторяется цикл for, и последний путь в списке задается как изображение. - person Nirup Iyer; 17.04.2017
comment
@NipurIyer нужна еще одна помощь в моем случае, как я могу выбрать одно изображение из списка или из представления сетки (на первой вкладке есть те же изображения) и отобразить это изображение в другом фрагменте. - person Kuldeep Singh; 17.04.2017
comment
Давайте продолжим обсуждение в чате. - person Nirup Iyer; 17.04.2017