使用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" />
验证步骤
- 补全GridImageAdapter的代码,确保layout_grid_imageview布局里的图片控件是
SimpleDraweeView,并且id正确。 - 初始化Fresco,添加网络权限。
- 重新运行App,看看GridView里的图片是否正常显示。
内容的提问来源于stack exchange,提问作者Chaitanya Reddy
相关产品推荐
相关产品推荐

