当前位置: 首页 > 知识库问答 >
问题:

java - android 使用 recyclerview 渲染服务端图片列表不显示?

牛大发
2023-09-28

Recyclerviewlayout 布局文件如下:

<?xml version="1.0" encoding="utf-8"?><ImageView        android:id="@+id/image"        xmlns:app="http://schemas.android.com/apk/res-auto"        xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scaleType="centerCrop"        tools:src="@drawable/background"/>

适配器代码如下:

public class ImageRecyclerViewAdapter extends RecyclerView.Adapter<ImageViewHolder> {    private final Activity activity;    private final List<String> images;    public ImageRecyclerViewAdapter(Activity activity, List<String> 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();    }}

通过上述代码渲染视图图片不显示!如果给图片布局设置一个高度又可以正常显示,这是为什么?

共有1个答案

牟慎之
2023-09-28

可能是因为你的 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<Drawable>() {        @Override        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {            return false;        }        @Override        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> 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);
 类似资料:
  • 服务端动态渲染网页是生成网页的最常用方法, 该方法同样适用于动态生成包含 Highcharts 图表的网页。 服务端动态渲染网页的做法:后端程序读取数据库数据并按照一定的业务逻辑处理成字符串,在页面对应位置上输出。 下面我们用 PHP 举例简单说明这个过程: 实例1: 只包含数值的 <?php // php 读取数据库并生成 字符串,这里这是简单的实例 // 读取数据 while ($

  • 服务端渲染一个很常见的场景是当用户(或搜索引擎爬虫)第一次请求页面时,用它来做初始渲染。当服务器接收到请求后,它把需要的组件渲染成 HTML 字符串,然后把它返回给客户端(这里统指浏览器)。之后,客户端会接手渲染控制权。 下面我们使用 React 来做示例,对于支持服务端渲染的其它 view 框架,做法也是类似的。 服务端使用 Redux 当在服务器使用 Redux 渲染时,一定要在响应中包含应用

  • 准备动作 1、安装nodejs与安装express 安装nodejs教程:http://www.cnblogs.com/pigtail/archive/2013/01/08/2850486.html 安装 express 教程:https://www.wenjiangs.com/doc/f5jxm7ii 2、安装node-jsx(使nodejs支持jsx语法) $ npm install node

  • 实验性 SSR 支持还处于试验阶段,你可能会遇到 bug 和不受支持的用例。请考虑你可能承担的风险。 注意 SSR 特别指支持在 Node.js 中运行相同应用程序的前端框架(例如 React、Preact、Vue 和 Svelte),将其预渲染成 HTML,最后在客户端进行脱水化处理。如果你正在寻找与传统服务器端框架的集成,请查看 后端集成指南。 下面的指南还假定你在选择的框架中有使用 SSR

  • 从 3.8.0 开始,san 的服务器端渲染由 san-ssr 实现。如果你在使用 3.8.0 之前的 san,请参考 服务器端渲染(3.8.0 之前)。 San 的服务端渲染支持是基于 组件反解 的: 服务端输出的 HTML 中带有对视图无影响,能帮助组件了解数据与视图结构的标记片段 浏览器端,组件初始化时从标记片段理解组件结构,在后续用户操作时组件能正确响应,发挥作用 提示:由于组件运行环境需

  • info 如果您能了解下面这些技术,能加快您对本文的了解 vuex - Vue.js 应用程序开发的状态管理模式 Vue.js SSR - Vue.js 服务器端渲染 webpack - 编译构建工具 Lavas 服务器端渲染模板参考了 vue-hackernews 的渲染和开发机制,并且结合了 Lavas 的 App Shell 模板,导出的工程中会有 App Shell 等 如果您不了解 vu