技术标签: 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
}
}
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之内
文章浏览阅读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加上这一行接着就是一步一步安装了..._虚拟机安装苹果
文章浏览阅读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
文章浏览阅读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
文章浏览阅读975次。注:写了一系列的结构体的分析的文章,在这里列一个列表:FFMPEG结构体分析:AVFrameFFMPEG结构体分析:AVFormatContextFFMPEG结构体分析:AVCodecContextFFMPEG结构体分析:AVIOContextFFMPEG结构体分析:AVCodecFFMPEG结构体_avstream' has no member named 'codecpar
文章浏览阅读167次。1 事务简介事务管理是企业级应用程序开发中必不可少的技术, 用来确保数据的完整性和一致性.事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用事务的四个关键属性(ACID)原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.一致性(consistency): ..._ssm关闭事务
文章浏览阅读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周转时间怎么算
文章浏览阅读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输入后没有回显
文章浏览阅读512次。importjava.util.Scanner;publicclassA05{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubScannerinput=newScanner(System.in);System.out.println("请输入消费金..._是否参加优惠换购活动
文章浏览阅读442次。1、jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动jquery图片特效制作仿腾讯QQ商城首页banner焦点图片轮播切换效果,带索引按钮控制和左右按钮控制图片切换。2、jquery图片切换插件制作图片层叠缩放展示效果jquery图片插件制作图片等比列缩放层叠样式,图片叠加展示。点击层叠最上层的图片依次点击缩放图片层叠缩放切换。3、jquery图像幻灯片制作大小图片切换滚动展示jque..._jquery ppt
文章浏览阅读4.4k次。(I)直线篇1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法。然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线。其中r为该直线到原点的距离,theta为该直线的垂线与x轴的夹角。如下图所示。2 如果坐标系中有多个点,又怎样识别出哪些点在一条直线上呢?使用hough变换来检测直线的思_对笔记本摄像头捕获的视频进行hough直线检测和圆检测
文章浏览阅读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的虚拟环境
文章浏览阅读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