android 使用 recyclerview 渲染服务端图片列表不显示?-灵析社区

走你啊啊啊啊啊

`Recyclerview` 的 `layout` 布局文件如下: 适配器代码如下: public class ImageRecyclerViewAdapter extends RecyclerView.Adapter { private final Activity activity; private final List images; public ImageRecyclerViewAdapter(Activity activity, List images) { this.activity = activity; this.images = images; } @NonNull @NotNull @Override public ImageViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); // 注意第三个参数;仅返回视图,不附加视图到parent View view = inflater.inflate(R.layout.recyclerview_item_image, parent, false); return new ImageViewHolder(view); } @Override public void onBindViewHolder(@NonNull @NotNull ImageViewHolder holder, int position) { String src = this.images.get(position); ImageView imageView = holder.getImageView(); // 填充src Glide.with(this.activity.getBaseContext()) .load(src) .into(imageView); } @Override public int getItemCount() { return this.images.size(); } } 通过上述代码渲染视图图片不显示!如果给图片布局设置一个高度又可以正常显示,这是为什么?

阅读量:271

点赞量:12

问AI
可能是因为你的 ImageView 在布局文件里的 layout_height 设置成了 wrap_content。在加载图片的时候,因为图片还没有被加载进来,系统不知道图片的大小,所以没法正测量到 ImageView 的高度。 你可以指定一个高度,android:layout_height="200dp"。或者用占位符: Glide.with(this.activity.getBaseContext()) .load(src) .placeholder(R.drawable.placeholder) // 设置占位符 .into(imageView); 还有一种方法就是动态设置ImageView的高度: Glide.with(this.activity.getBaseContext()) .load(src) .addListener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { return false; } @Override public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { // 根据图片的宽高比设置ImageView的高度 int width = imageView.getWidth(); float aspectRatio = (float) resource.getIntrinsicWidth() / (float) resource.getIntrinsicHeight(); int height = Math.round(width / aspectRatio); imageView.setLayoutParams(new ViewGroup.LayoutParams(width, height)); return false; } }) .into(imageView);