android RecyclerView添加footerview详解
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之内
总结
到此这篇关于android recyclerview添加footerview详解的文章就介绍到这了,更多相关recyclerview添加footerview内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
下一篇: Android存储访问框架的使用小结
推荐阅读
-
Android RecyclerView使用方法详解
-
Android中RecyclerView实现分页滚动的方法详解
-
Android用RecyclerView实现动态添加本地图片
-
Android 给RecyclerView添加分割线的具体步骤(分享)
-
Android RecyclerView 复用错乱通用解法详解
-
Recyclerview添加头布局和尾布局、item点击事件详解
-
Android系统添加自定义鼠标样式通过按键切换实例详解
-
Android实现RecyclerView添加分割线的简便方法
-
Android实战RecyclerView头部尾部添加方法示例
-
Android MVVM架构实现RecyclerView列表详解流程