将图像 url 设置为 listadapter 以使用 Picasso 显示图像

Posted

技术标签:

【中文标题】将图像 url 设置为 listadapter 以使用 Picasso 显示图像【英文标题】:Set image url into listadapter to show images using Picasso 【发布时间】:2019-09-15 12:58:51 【问题描述】:

我有一个简单的列表适配器,我想在其中显示带有一些文本信息的食物图像。到目前为止,我知道我可以使用 AQuery 或 Picasso 之类的库来完成它,但是在阅读了很多教程后我无法弄清楚如何实现它。

我在我的依赖项中添加了毕加索库。假设我的图像视图 ID 是 ImgViewFood

活动

JSONArray jsonArr = jsonObj.getJSONArray("foodnames");
                for (int i = 0; i < jsonArr.length(); i++) 
                    HashMap<String, String> food = new HashMap<>();
                    JSONObject jsonObj = jsonArr.getJSONObject(i);

                    String name = jsonObj.getString("food_name");
                    String url = jsonObj.getString("img_url");

                    food.put("foodname", name);
                    foodList.add(food);
                
                ListAdapter adapter = new SimpleAdapter(
                        FoodListActivity.this, foodList,
                        R.layout.list_food_detail, new String[]"foodname", new int[]R.id.view_food_name);

                listviewFood.setAdapter(adapter);

【问题讨论】:

How to use Picasso with listview? 查看毕加索官方网站。 square.github.io/picasso 我可以使用 picasso 显示图像,这不是问题,问题是如何使用 listadapter 实现它。 需要完整的代码来看看。你的 ListAdapter 类在哪里? Atlast 想通了。解决了。我正在发布我的解决方案。 【参考方案1】:

完整的解决方案

列表适配器

JSONArray jsonArr = jsonObj.getJSONArray("foodnames");
                for (int i = 0; i < jsonArr.length(); i++) 
                    HashMap<String, String> food = new HashMap<>();
                    JSONObject jsonObj1 = jsonArr.getJSONObject(i);
                    String url = "www.nomadicbong.com/images/";
                    food.put("foodname", jsonObj1.getString("foodname"));
                    food.put("foodid", jsonObj1.getString("foodid"));
                    food.put("imgname",url.concat(jsonObj1.getString("imagename")));
                    foodList.add(food);
                

               ListAdapter adapter = new CustomImageAdapter(

                        FoodListActivity.this, foodList,
                        R.layout.list_food_detail, new String[]"foodid", "foodname", new int[]R.id.view_food_id,R.id.view_food_name);

                listviewFood.setAdapter(adapter);

CustomImageAdapter

import com.squareup.picasso.*;

/**
 * Created by nomadicbong on 4/25/2019.
 */

public class CustomImageAdapter extends SimpleAdapter

    public CustomImageAdapter(Context context, List<? extends Map<String, ?>> foodList, int resource, String[] from, int[] to)
        super(context, foodList, resource, from, to);
    
    public View getView(int position, View convertView, ViewGroup parent)

        View v = super.getView(position, convertView, parent);

        ImageView imgvw = (ImageView) v.getTag();
        if(imgvw == null)
            imgvw = (ImageView) v.findViewById(R.id.imgFood1);
            v.setTag(imgvw);
        
        // get the url from the data in the `Map`
        String url = ((Map)getItem(position)).get("imgname").toString();
        Picasso.with(v.getContext()).load(url).into(imgvw);
        return v;
    

【讨论】:

如果这是答案,您可以单击它左侧的勾号/复选标记,以将问题标记为已解决。它将变为绿色以确认已解决状态。

以上是关于将图像 url 设置为 listadapter 以使用 Picasso 显示图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义 ListAdapter 设置为 appwidget 中的列表视图?

iOS:从 url 加载图像

从图像 URL 将图标设置为地图中的标记

设置 ListAdapter 时 Android Java 应用程序崩溃

未设置 CORS 标头 - 我可以请求图像 url,然后将其返回给自己吗?

如何在 JQuery 中格式化 URL.Action() 调用以设置链接的 href 属性?