Android SimpleAdapter图像和文本列表

时间:2015-09-21 15:08:19

标签: android json listview imageview simpleadapter

我目前正尝试在Android上开发一款应用,允许用户在listView中列出自己的对象。

我遇到了将objet图像的url字符串转换为imageview的问题。

我已经成功从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);
    }


}

3 个答案:

答案 0 :(得分:0)

您应该使用像Picasso或Glide这样的库来从网址加载图片。请记住,您必须先下载它才能在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()方法中的适配器内执行此操作。

答案 1 :(得分:0)

您应该为ListView创建自己的自定义适配器。 It is pretty simple

要从网址中提取图片,您可能需要使用Picasso库。在适配器的getView中使用此库,您可以添加此行来设置图像。

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

mYourItems是此适配器迭代的项目集合。 position也是当前行的索引。

答案 2 :(得分:0)

我认为你应该创建自己的BaseAdapter实现,因为SimpleAdapter对你的目标不够灵活。您可以使用某些第三方库以异步方式从URL加载图像并将其插入视图中。例如,您可以使用PicassoUIL