当前位置: 首页 > news >正文

【Android】四种不同类型的ViewHolder的xml布局

在这里插入图片描述

三三要成为安卓糕手
书接上文

一:四种不同类型的ViewHolder的xml布局

广告样式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="match_parent"android:layout_height="200dp"android:scaleType="centerCrop"android:src="@drawable/bg_ad1"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_close"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="点击关闭广告"android:textColor="@color/white"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="@id/iv_picture" /></androidx.constraintlayout.widget.ConstraintLayout>

单张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="100dp"android:layout_height="70dp"android:scaleType="centerCrop"android:src="@drawable/icon_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="落魄谷中寒风吹,春秋蝉鸣少年归,荡魂山处石人泪,定仙游走魔向北,逆流河上万仙退,爱情不敌坚持泪,宿命天成命中败,仙尊悔而我不悔"android:textSize="18sp"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toTopOf="@id/iv_picture" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="1"android:text="作者:大爱仙尊"android:textSize="16sp"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toBottomOf="@+id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>

两张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:padding="12dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="2"android:text="我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题"android:textColor="@color/black"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:ellipsize="end"android:maxLines="1"android:text="我是作者我是作者我是作者"android:textSize="16sp"app:layout_constraintEnd_toEndOf="@id/iv_picture2"app:layout_constraintTop_toBottomOf="@id/iv_picture2" /><ImageViewandroid:id="@+id/iv_picture1"android:layout_width="0dp"android:layout_height="100dp"android:scaleType="centerCrop"android:layout_marginTop="8dp"android:src="@drawable/ic_article_1"app:layout_constraintEnd_toStartOf="@id/iv_picture2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_title" /><ImageViewandroid:id="@+id/iv_picture2"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="20dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture1"app:layout_constraintTop_toTopOf="@id/iv_picture1" /></androidx.constraintlayout.widget.ConstraintLayout>

三张图片的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:padding="12dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="2"android:text="我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题我是一个标题"android:textColor="@color/black"android:textSize="18sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:ellipsize="end"android:maxLines="1"android:text="我是作者我是作者我是作者"android:textSize="16sp"app:layout_constraintEnd_toEndOf="@id/iv_picture3"app:layout_constraintTop_toBottomOf="@id/iv_picture3" /><ImageViewandroid:id="@+id/iv_picture1"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginTop="8dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_1"app:layout_constraintEnd_toStartOf="@id/iv_picture2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_title" /><ImageViewandroid:id="@+id/iv_picture2"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="6dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_2"app:layout_constraintEnd_toStartOf="@id/iv_picture3"app:layout_constraintStart_toEndOf="@id/iv_picture1"app:layout_constraintTop_toTopOf="@id/iv_picture1" /><ImageViewandroid:id="@+id/iv_picture3"android:layout_width="0dp"android:layout_height="100dp"android:layout_marginLeft="6dp"android:scaleType="centerCrop"android:src="@drawable/ic_article_3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture2"app:layout_constraintTop_toTopOf="@id/iv_picture1" /></androidx.constraintlayout.widget.ConstraintLayout>

二:getItemViewType

新的知识点,用来判断布局类型,提前设计好int类成员变量用于返回值;在创建Holder(杯子)时,返回值直接作为参数传递给onCreateViewHolder方法中的形参viewtype了,具体内部源代码是怎么实现的不深究

三:Article类的设计

package com.xlong.myapplication.recyclerview;public class Article {private String title;//标题private String desc;//描述private String author;//作者private long publish;//发布时间private int picture;//图片资源private int picture2;//图片资源2private int picture3;//图片资源3private boolean idAd;//当前的咨询是不是广告private int adPicture;//广告对应的图片资源public int getPicture2() {return picture2;}public void setPicture2(int picture2) {this.picture2 = picture2;}public int getPicture3() {return picture3;}public void setPicture3(int picture3) {this.picture3 = picture3;}public boolean isIdAd() {return idAd;}public void setIdAd(boolean idAd) {this.idAd = idAd;}public int getAdPicture() {return adPicture;}public void setAdPicture(int adPicture) {this.adPicture = adPicture;}public Article(boolean idAd, int adPicture) {this.idAd = idAd;this.adPicture = adPicture;}public Article(String title, String author, int picture) {this.title = title;this.author = author;this.picture = picture;}public int getPicture() {return picture;}public void setPicture(int picture) {this.picture = picture;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public long getPublish() {return publish;}public void setPublish(long publish) {this.publish = publish;}
}

四:一些细节

1:设计

图片成员变量怎么设计

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建数据中不同的Article类型(两、三张图片,广告),使用不同的构造方法,或者get和set方法。这些都是基本功要掌握扎实

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2:数据源的创建细节

在设置循环视图中,数据在适配器的添加之前,或者之后问题都不大

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为setArticles中notifyDataSetChanged();的调用会告诉RecycleView刷新数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:多布局的设计,不要用泛型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4:case + default 允许共存

在写创建Holder,内部代码逻辑的时候不要返回一个null,无论如何都需要给onCreateViewHolder返回一个viewHolder

switch 结构里:

  • case 用于匹配具体的条件分支,处理特定的情况(比如 case ITEM_TYPE_ARTICLE_1 想处理类型为 ITEM_TYPE_ARTICLE_1 的情况 )。
  • default 是 “兜底” 分支,当所有 case 都没匹配上时,才会走 default 里的逻辑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5:对比一下

对比一下就明白了,左图是一种视图类型所以只用一个MyVIewHolder(用的是泛型)即可;我们增加到了4种MyviewHolder如右图代码处理逻辑

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6:效果图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五:为RecyclerView添加分割线

需求:为每一个item做一个分割线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

思路在每一个四种xml布局中单独,设置一个view分割线,

    <Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="@color/my_blue"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent" />

但是会比较麻烦一点:单独做一个分割线,要加内边距,嵌套什么的,得不偿失,只作为备选方案,就比如以下的代码

    <androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="12dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="100dp"android:layout_height="70dp"android:scaleType="centerCrop"android:src="@drawable/icon_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="2"android:text="落魄谷中寒风吹,春秋蝉鸣少年归,荡魂山处石人泪,定仙游走魔向北,逆流河上万仙退,爱情不敌坚持泪,宿命天成命中败,仙尊悔而我不悔"android:textSize="18sp"android:textStyle="bold"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toTopOf="@id/iv_picture" /><TextViewandroid:id="@+id/tv_author"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:ellipsize="end"android:maxLines="1"android:text="作者:大爱仙尊"android:textSize="16sp"app:layout_constraintStart_toEndOf="@id/iv_picture"app:layout_constraintTop_toBottomOf="@+id/tv_title" /></androidx.constraintlayout.widget.ConstraintLayout>

效果如下,一般般吧

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:安卓默认自带分割线

Recycle中提供了直接添加分割线的方法

//4.1系统自带分割线recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

(1)addItemDecoration()

添加item装饰;参数是 ItemDecoration 的子类实例

(2)new DividerItemDecoration()

这是 Android 系统提供的一个ItemDecoration子类

创建item装饰分割器,

  • 第一个参数 context:上下文对象,通常是当前 Activity

  • 第二个参数 orientation:分割线方向

    • DividerItemDecoration.VERTICAL:垂直方向的分割线(用于垂直滚动的列表)
    • DividerItemDecoration.HORIZONTAL:水平方向的分割线(用于水平滚动的列表)

2:用图片当做分割线

//4.2使用图片素材作为分割线DividerItemDecoration decoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);Drawable drawable = getDrawable(R.drawable.item_div);decoration.setDrawable(drawable);recyclerView.addItemDecoration(decoration);

其实就比上面的代码多了一个setDrawable(),上面代码内部应该有默认设置了一个Drawable

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义图片作为分割线,对照片的要求更高,后面还会学习在安卓studio中,自己去画一些图片,现在就先学这两种方式就OK了

http://www.dtcms.com/a/329015.html

相关文章:

  • 双写一致性问题如何解决?
  • Python 元类基础:从理解到应用的深度解析
  • 机器翻译:学习率调度详解
  • 小电视视频内容获取GUI工具
  • 长篇音频制作(小说自动配音)完整教程
  • 嵌入式 - linux软件编程: 目录 IO及时间相关的函数接口
  • 《Python学习之基础语法1:从零开始的编程之旅》
  • Verilog功能模块--SPI主机和从机(02)--SPI主机设计思路与代码解析
  • 电商项目微服务架构拆分实战
  • 使用TexLive与VScode排版论文
  • 内容索引之word转md工具 - markitdown
  • 华为 HCIE 大数据认证中 Linux 命令行的运用及价值
  • 【linux】--U盘挂载
  • 【CV 目标检测】③——目标检测方法
  • 2025_07_安装Jmeter,创建一个登录请求
  • python的游戏评级论坛系统
  • 云计算-OpenStack 实战运维:从组件配置到故障排查(含 RAID、模板、存储管理,网络、存储、镜像、容器等)
  • PLM产品管理系统有什么功能模块?PLM系统核心功能模块解析
  • WPS文字和Word文档如何选择多个不连续的行、段
  • rk3588 ubuntu20.04安装包经常出现的问题总结(chatgpt回复)
  • 疏老师-python训练营-Day44预训练模型
  • 【leetcode】55. 跳跃游戏1
  • 阿里云Anolis OS 8.6的公有云仓库源配置步骤
  • Python uv的使用和配置
  • 联网车辆功能安全和网络安全的挑战与当前解决方案
  • TraeCN与Cursor对比分析:双雄争锋下的AI编程工具演进之路
  • 河南萌新联赛2025第(五)场:信息工程大学”
  • 弹性扩展新范式:分布式LLM计算的FastMCP解决方案
  • 卷积神经网络(CNN):卷积和池化
  • 一周学会Matplotlib3 Python 数据可视化-绘制热力图(Heatmap)