RecyclerView添加footerview-程序员宅基地

技术标签: android  android studio  kotlin  RecyclerView  

class FooterViewAdapter :RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    

    companion object {
    
        const val TYPE_FOOTER: Int = 1
        const val TYPE_NORMAL: Int = 0
    }

    var isFooterView: Boolean = false

    fun setFooterView() {
    
        this.isFooterView = true
        notifyItemInserted(itemCount)
    }

    fun removeFooterView() {
    
        this.isFooterView = false
    }


    override fun getItemViewType(position: Int): Int {
    
        return if (isFooterView && position == itemCount - 1) TYPE_FOOTER else TYPE_NORMAL
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    
        if (viewType == TYPE_FOOTER) {
    
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.focus_footer_view_no_line, parent, false)
            return BottomViewHolder(view)
        }
        
        return 设置的其他VIewHolder
    }


    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    
        if (getItemViewType(position) == TYPE_FOOTER) return
        你的绑定事件不用动
    }
    class BottomViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    
    }
    
    override fun getItemCount(): Int {
    
        return if (isFooterView && mData.size > 0) mData.size + 1
        else mData.size
    }
}


  1. 定义viewtype的类型,一个是正常的,一个是底部view
 companion object {
    
        const val TYPE_FOOTER: Int = 1
        const val TYPE_NORMAL: Int = 0
    }

2.定义一个是否加FooterView的Boolean变量
(1)如果你的底部view是固定的,就不需要解析多次xml布局,直接在onCreateViewHolder方法里解析一次布局。
var isFooterView: Boolean = false
(2)如果你的底部布局是变化的,那这里设置的就应该是
var isFooterView: View

3.FooterView相关方法

//设置FooterView
fun setFooterView() {
    
        this.isFooterView = true
        notifyItemInserted(itemCount)
       //这个方法是通知Adapter有新的Item插入
    }

//移除FooterView
    fun removeFooterView() {
    
        this.isFooterView = false
    }

4.重写getItemViewType
根据isFooterView判断是否加FooterView&&item是不是最后一个来定位最后一个item,其他的ViewType都是TYPE_NORMAL

override fun getItemViewType(position: Int): Int {
    
        return if (isFooterView && position == itemCount - 1) TYPE_FOOTER else TYPE_NORMAL
    }

5.itemCount
这个方法很重要,是计算有多少个Item的,上面也用到了。
很简单,添加了FooterView,ItemCount加1

override fun getItemCount(): Int {
    
        return if (isFooterView && mData.size > 0) mData.size + 1
        else mData.size
    }

6.接下来创建一个空ViewHolder,当然也可以复用其他已创建的ViewHolder

 class BottomViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    
    }

7.重写onCreateViewHolder,根据viewType来解析不同的布局。

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    
        if (viewType == TYPE_FOOTER) {
    
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.focus_footer_view_no_line, parent, false)
            return BottomViewHolder(view)
        }
        
        return 设置的其他VIewHolder
    }

8.重写onBindViewHolder,如果viewType为TYPE_FOOTER就跳过

 override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    
        if (getItemViewType(position) == TYPE_FOOTER) return
        你的绑定事件不用动
    }

9.最后说一下getAdapterPosition和getLayoutPosition
建议如下:

当你需要绑定数据的时候使用holder.getAdapterPosition();来实时获取

当你进行点击/滑动等监听事件用holder.getLayoutPosition();来获取位置

在绝大多数的时候holder.getAdapterPosition()和holder.getLayoutPosition()是没有任何区别的,因为两者数据的不同在16ms之内

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DASHBB/article/details/122513764

智能推荐

如何在虚拟机上安装苹果系统(Mac OS)_虚拟机安装苹果-程序员宅基地

文章浏览阅读9k次,点赞3次,收藏22次。准备工具VMware Workstation 12Mac OSpython-2.7.9.amd64unlocker206如果没有以上的软件可以私信我:1.安装VMware,我已经安装了,这里不是重点2.安装python2,我已经安装好了,这个也不是我们的重点3.运行unlocker206的win-install.cmd,对vmware进行解锁4.这样VMware中新建虚拟机会出现Apple Mac OS X加上这一行接着就是一步一步安装了..._虚拟机安装苹果

HTML5 CSS3 Introduction_unrestricted file system access to "/src/main.js" -程序员宅基地

文章浏览阅读1k次。HTML 5 Pros & Cons•Pros–It is standard but it is still a draft–Easy to use–Less code/less bug•Cons–Browser compatibility–Hard_unrestricted file system access to "/src/main.js" for security concerns, acc

NTP同步时间_qqyntp-程序员宅基地

文章浏览阅读91次。文章目录一、安装ntp和ntpd二、修改配置文件一、安装ntp和ntpdyum install -y ntpyum install -y ntpd【注意:没法下载可以先search】二、修改配置文件vi /etc/ntp.conf主节点:其他节点:三、启动/bin/systemctl restart ntpd.serviceservice ntpd startntpstat #查看是否同步,这个过程可能要等一段时间date #查看所有机器时间是否相同形如这样_qqyntp

FFMPEG结构体分析:AVStream_avstream' has no member named 'codecpar-程序员宅基地

文章浏览阅读975次。注:写了一系列的结构体的分析的文章,在这里列一个列表:FFMPEG结构体分析:AVFrameFFMPEG结构体分析:AVFormatContextFFMPEG结构体分析:AVCodecContextFFMPEG结构体分析:AVIOContextFFMPEG结构体分析:AVCodecFFMPEG结构体_avstream' has no member named 'codecpar

ssm复习之spring事务管理_ssm关闭事务-程序员宅基地

文章浏览阅读167次。1 事务简介事务管理是企业级应用程序开发中必不可少的技术, 用来确保数据的完整性和一致性.事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用事务的四个关键属性(ACID)原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.一致性(consistency): ..._ssm关闭事务

FCFS计算周转时间、带权周转时间、平均周转时间和平均带权周转时间。_fcfs周转时间怎么算-程序员宅基地

文章浏览阅读8.4k次,点赞2次,收藏32次。#include<stdio.h>#include<string.h>#include<conio.h>main(){ char pn[10][10],t[10]; int arr[10],bur[10],star[10],finish[10],tat[10],wt[10],i,j,n,temp; int totwt=0,tottat=0;//clrscr(); printf("请输入进程数量:"); scanf("%d"_fcfs周转时间怎么算

随便推点

输入redis-cli.exe -h 127.0.0.1 -p 6379命令没有反应_redis-cli -p 6379输入后没有回显-程序员宅基地

文章浏览阅读8.7k次,点赞2次,收藏4次。我的是在Windows上安装完Redis后出现此问题的,安装完Redis后先在一个窗口输入命令redis-server.exe redis.windows.conf启动服务器,如下图:然后打开另一个窗口使用命令redis-cli.exe -h 127.0.0.1 -p 6379连接此服务(端口是6379),但是此时输入完命令后就没反应了,没有错误提示也没有终止…解决办法:关掉防火墙即可…(..._redis-cli -p 6379输入后没有回显

换购优惠 java代码_java-第四章-升级我行我素购物管理系统,实现换购功能-程序员宅基地

文章浏览阅读512次。importjava.util.Scanner;publicclassA05{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubScannerinput=newScanner(System.in);System.out.println("请输入消费金..._是否参加优惠换购活动

jqueryppt_18款 非常实用 jquery幻灯片图片切换-程序员宅基地

文章浏览阅读442次。1、jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动jquery图片特效制作仿腾讯QQ商城首页banner焦点图片轮播切换效果,带索引按钮控制和左右按钮控制图片切换。2、jquery图片切换插件制作图片层叠缩放展示效果jquery图片插件制作图片等比列缩放层叠样式,图片叠加展示。点击层叠最上层的图片依次点击缩放图片层叠缩放切换。3、jquery图像幻灯片制作大小图片切换滚动展示jque..._jquery ppt

hough变换是如何检测出直线和圆的_对笔记本摄像头捕获的视频进行hough直线检测和圆检测-程序员宅基地

文章浏览阅读4.4k次。(I)直线篇1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法。然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线。其中r为该直线到原点的距离,theta为该直线的垂线与x轴的夹角。如下图所示。2 如果坐标系中有多个点,又怎样识别出哪些点在一条直线上呢?使用hough变换来检测直线的思_对笔记本摄像头捕获的视频进行hough直线检测和圆检测

python3.7成功换虚拟环境python3.6_在终端创建python3.6的虚拟环境-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏7次。因为我们要创建一个python3.6的虚拟环境,所以在anaconda prompt终端输入conda create -n Py36 python=3.6;选择y,最后出现done,创建成功。base是我的基本环境,TensorFlow是我创建的虚拟环境。选择我们刚刚创建的虚拟环境py36里面的python.exe。查看一下 然后我们打开envs,出现我们刚刚创建的py36。在图中可以看出我们原来的基础环境为python3.7,点击红框里面的...三个点进行设置。出现此界面,我们点击create。_在终端创建python3.6的虚拟环境

ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full comm-程序员宅基地

文章浏览阅读1.3k次。ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.centos7使用django安装mysqlclient时出现的问题 ERROR: Command errored out with exit status 1: command: /root/.virtualenvs/djangodemo/bin/python -c 'i_command errored out with exit status 1: python setup.py egg_info check the l

推荐文章

热门文章

相关标签