Android SimpleAdapter изображение и текстовый список

В настоящее время я пытаюсь разработать приложение для Android, которое позволяет пользователям перечислять свои собственные объекты в listView.

Я столкнулся с проблемой преобразования строки URL-адреса изображения объекта в изображение.

Мне уже удалось получить URL-адрес объекта из JSON, но как только я его получил, я не знаю, как поместить его в свой imageView.

Это мой код:

@Override
    protected String doInBackground(String... arg0) {
        try {

            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
            dataJsonArr = json.getJSONArray("objects");

            //Création de la ArrayList qui nous permettra de remplire la listView
            listItem = new ArrayList<HashMap<String, String>>();

            // On parcour le JSON
            for (int i = 0; i < dataJsonArr.length(); i++) {
                JSONObject c = dataJsonArr.getJSONObject(i);

                // Formation des items de notre ListView
                map = new HashMap<String, String>();
                map.put("titre", c.getString("title"));
                map.put("price", c.getString("price"));
                map.put("addedDate", c.getString("addedDate"));
                map.put("img", c.getString("picture_url"));
                listItem.add(map);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(String message) {

        Bitmap bmap = getBitmapFromURL(listItem.get(0).get("img").toString());
        image.setImageBitmap(bmap);

        //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue fragment_add_objet
        mSchedule = new SimpleAdapter (getActivity(), listItem, R.layout.layout_user_objects,
                new String[] {"img", "titre", "price", "addedDate"}, new int[] {R.id.img, R.id.titre, R.id.price, R.id.addedDate});

        //On attribut à notre listView l'adapter que l'on vient de créer
        maListViewPerso.setAdapter(mSchedule);
    }


}

person Jimmy Jims    schedule 21.09.2015    source источник


Ответы (3)


Вы должны создать свой собственный адаптер для ListView. Это довольно просто.

Для извлечения изображений из URL вы можете использовать библиотеку Picasso. Используя эту библиотеку в вашем getView вашего адаптера, вы можете добавить эту строку в настройку изображения.

Picasso.with(getContext())
       .load(mYourItems[position].getURL())
       .into(imageView);

mYourItems — это набор элементов, которые перебирает этот адаптер. position также является индексом текущей строки.

person frogatto    schedule 21.09.2015

Вы должны использовать библиотеку, такую ​​​​как Picasso или Glide, для загрузки изображения с URL-адреса. Имейте в виду, что вы должны сначала загрузить его, чтобы иметь возможность отображать его в ImageView. Это облегчает вашу жизнь, но вы всегда можете скачать его без использования библиотеки, хотя я не нахожу причины.

Здесь у вас есть пример кода с использованием Picasso:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Вы можете проверить это здесь: http://square.github.io/picasso/

Glide также является хорошим вариантом и очень похож с точки зрения использования.

https://github.com/bumptech/glide

Их больше, но я упомянул те, которые мне понравились больше всего.

Кроме того, если это список элементов, вы должны делать это внутри своего адаптера в методе getView().

person Daniel Ocampo    schedule 21.09.2015

Я думаю, вам следует создать собственную реализацию BaseAdapter, потому что SimpleAdapter недостаточно гибок для ваших целей. И вы можете использовать некоторые сторонние библиотеки для асинхронной загрузки изображения с URL-адреса и вставки его в представление. Например, вы можете использовать Picasso или UIL

person Vasyl Glodan    schedule 21.09.2015