You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Fresco加载网络图片至GridView失败求助

解决Fresco加载GridView图片不显示的问题

嘿,我来帮你排查这个问题!从你贴的代码来看,有几个关键问题导致GridView里的图片不显示,咱们一步步来解决:

1. GridImageAdapter代码不完整(核心问题)

你贴的GridImageAdapter代码写到一半就中断了:

private int layoutResource; private

ArrayAdapter必须实现getView()方法才能为GridView生成每个item的视图,现在你的适配器根本没有完成这个核心逻辑,这是GridView没有内容的最主要原因。

咱们来补全GridImageAdapter的代码,用Fresco的SimpleDraweeView来加载图片:

package com.example.android.tabswithswipes.Utils;

import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import com.example.android.tabswithswipes.R;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;

public class GridImageAdapter extends ArrayAdapter<String> {
    private Context mContext;
    private LayoutInflater mInflater;
    private int layoutResource;

    // 补全构造函数
    public GridImageAdapter(Context context, int layoutResource, String dummy, ArrayList<String> imgURLs) {
        super(context, layoutResource, imgURLs);
        this.mContext = context;
        this.layoutResource = layoutResource;
        this.mInflater = LayoutInflater.from(context);
    }

    // 必须实现getView方法
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {
            convertView = mInflater.inflate(layoutResource, parent, false);
            holder = new ViewHolder();
            holder.imageView = convertView.findViewById(R.id.gridImageView); // 这里要对应你layout_grid_imageview里的SimpleDraweeView的id
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // 获取当前图片URL,用Fresco加载
        String imgUrl = getItem(position);
        Uri uri = Uri.parse(imgUrl);
        holder.imageView.setImageURI(uri);

        return convertView;
    }

    // ViewHolder优化性能
    private static class ViewHolder {
        SimpleDraweeView imageView;
    }
}

2. 检查Fresco是否初始化

Fresco必须在Application类中初始化才能正常工作,你需要创建一个自定义Application类,或者在现有Application的onCreate里添加:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

然后在AndroidManifest.xml里配置这个Application:

<application
    android:name=".MyApplication"
    <!-- 其他配置 -->
>

3. 其他小问题修正

  • GalleryFragment的继承问题:你的类名是GalleryFragment,但继承的是Activity,如果它是一个Fragment的话,应该继承android.support.v4.app.Fragment或者androidx.fragment.app.Fragment,不过这个不影响图片加载,但会影响页面的使用逻辑。
  • 移除冗余的UniversalImageLoader代码:你同时引入了Fresco和UniversalImageLoader,代码里既有SimpleDraweeView又有ImageLoader,建议统一用Fresco,避免混淆和不必要的依赖。
  • 检查网络权限:确保AndroidManifest.xml里添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" />

验证步骤

  1. 补全GridImageAdapter的代码,确保layout_grid_imageview布局里的图片控件是SimpleDraweeView,并且id正确。
  2. 初始化Fresco,添加网络权限。
  3. 重新运行App,看看GridView里的图片是否正常显示。

内容的提问来源于stack exchange,提问作者Chaitanya Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:27:21