BaseRecyclerAdapter之添加不同布局(头部尾部)

2024-06-03 12:48

本文主要是介绍BaseRecyclerAdapter之添加不同布局(头部尾部),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

字数615 阅读2604 评论19

最近写了个Android开源库「BaseRecyclerViewAdapterHelper」集成了很多常见需求的解决方案,希望大家多多star哦~!



多个布局item

头部+尾部

如何使用?

多个不同布局

public class MultipleItemAdapter extends BaseQuickAdapter<String> {private final int TEXT_TYPE = 1;private int mTextLayoutResId; public MultipleItemAdapter(Context context, List data, int... layoutResId) {super(context, layoutResId[0], data);mTextLayoutResId = layoutResId[1];}@Overrideprotected int getDefItemViewType(int position) {if (position % 2 == 0)return TEXT_TYPE;return super.getDefItemViewType(position);} @Overrideprotected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {if (viewType == TEXT_TYPE)return new TextViewHolder(getItemView(mTextLayoutResId, parent));return super.onCreateDefViewHolder(parent, viewType);}@Overrideprotected void onBindDefViewHolder(BaseViewHolder holder, String item) {if (holder instanceof TextViewHolder)holder.setText(R.id.tv, item); }@Overrideprotected void convert(BaseViewHolder helper, String item) {helper.setImageUrl(R.id.iv, item);}public class TextViewHolder extends BaseViewHolder {public TextViewHolder(View itemView) {super(itemView.getContext(), itemView);}}
}

添加头部尾部

mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());

原理分析

如果需要定义多个不同类型的布局,需要知道以下几点:

  • 重写getItemViewType()方法,根据需求规则给出不同的type值。
  • 在onCreateViewHolder()方法里面根据不同的type来创建不同的ViewHolder
  • 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据
  • 如果有额外布局(如:头部尾部)需要修改getItemCount()方法的返回数量

多个不同的布局的实现(三部曲)

1.重写了getDefItemViewType()方法,其实也就是父类的getItemViewType()里面的方法,如上所说,根据页面需求,做出规则,因为上面的UI是一个TextView一个ImageView交替的来,所以就写了个这样规则的if (position % 2 == 0)保证他们交替着显示。
2.type搞定了,接下来就是调用onCreateDefViewHolder()了,根据上面的type来创建不同的ViewHolder,
3.然后再接下来调用onBindDefViewHolder(),根据上面创建的ViewHolder的类型不同来进行相应的赋值。

添加头部和尾部(额外布局)

在上面的基础之上再重写getItemCount()在原本数据量上加上根据额外布局的数量,代码如下

@Overridepublic int getItemCount() {int i = mNextLoadEnable ? 1 : 0;return mData.size() + i + getHeaderViewsCount() + getFooterViewsCount();}

注意:如果是添加头部
那就必须在原onBindViewHolder()里面position-头部数量,因为不减去的话,那么数据就会从第二条开始遍历,所以要注意!

int index = position - getHeaderViewsCount();
convert(baseViewHolder, mData.get(index));

意外收获


国际友人的加盟

每次收获一点点,后续还会扩展更多功能,供大家使用及学习「BaseRecyclerViewAdapterHelper」。

这篇关于BaseRecyclerAdapter之添加不同布局(头部尾部)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027033

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已