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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android列表RecyclerView排列布局

    本文实例为大家分享了Android列表RecyclerView排列布局的具体代码,供大家参考,具体内容如下 效果图: 1.要添加相关的依赖 implementation 'androidx.recyclerview:recyclerview:1.1.0' 2.然后布局文件中准备容器 这个标签是显示目标容器对象的,其他需求可自定义 <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_list" android

  • android RecyclerView的一些优化点介绍

    目录 1.RecycledPool的重用 2.setHasFixedSize(boolean)的使用 3.setHasStableIds(boolean)的使用 4.ViewCacheExtension的使用 5.预加载 6.更新列表的方式 item局部更新 整体列表更新 总结 1.RecycledPool的重用 场景以及使用: 多个RecyclerView出现,并且他们的item布局结构一致,这时候可以进行重用. 在进行RecyclerView的初始化设置时候进行RecycledPool的设置

  • 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 notifyItem

  • Android RecyclerView 基础知识详解

    本周的谷歌I/O大会带来了很多关于Android的振奋人心的消息.可能我们需要较长的时间来消化Android L引入的新东西. 这些天我一直在研究RecyclerView,并想在此给各位分享一下到目前为止我的成果. RecyclerView是什么? RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的support-V7版本中提供支持. 在开发RecyclerView时充分考虑了扩展性,因此用它

  • Android RecyclerView使用方法详解

    本文为大家分享了Android RecyclerView使用方法,供大家参考,具体内容如下 1.RecyclerView 是在Android support - v7 里面提供的 新的列表组件,用来替代传统的ListView. . 要使用RecyclerView 需要给我工程添加 support:recycle-v7 的支持: app 右键 - Open Module Settings - Dependencies(依赖项) - 点 + 号 - 添加一个库 upport:recycle-v7 

  • Android RecyclerView基本使用详解

    什么是RecyclerView 关于RecyclerView,是一个主要用于展示和回收View的有一个控件,在官用了一句话来概括 RecyclerView 是一种通过提供有限的数据项窗口有效显示大数据集的视图. 基提供几个基本的功能, 控制其显示的方式 --->LayoutManager-(必需) 控制Item间的间隔 --->ItemDecoration--(非必需) 控制Item增删的动画--->ItemAnimator--(非必需) 以上就可以完成ListView大部的功能了,但是

  • Android RecyclerView线性布局详解(1)

    RecyclerView是Android 5.0新增的控件,在android-support-v7下面.官方文档对RecycleView介绍很简洁到位,如下: A flexible view for providing a limited window into a large data set. 大概意思就是说:在有限大小的窗口里显示大量数据的一个灵活的view. 下面是ReccleView继承图: 看到这里我们自然想到了与之类似的控件ListView,RecyclerView和ListVie

  • Android RecyclerView添加头部和底部实例详解

    Android RecyclerView添加头部和底部实例详解 如果只是想添加头部,可是使用GitHub里面这个项目,它可以为LinearLayoutManager,GridLayoutManager ,StaggeredGridLayoutManager布局的RecyclerView添加header.使用起来也十分简单: 只需将RecyclerViewHeader布局放在RecyclerView的上层. <FrameLayout android:layout_width="match_p

  • Android ListView的OnItemClickListener详解

    我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener.本文主要在于对OnItemClickListener的position和id参数做详细的解释,我相信有些人在这上面走了些弯路. 先来看一下官方的文档 position The position of the view in the adapter. id The row id of the item that was click

  • 将替代ListView的RecyclerView 的使用详解(一)

    RecyclerView 是 android-support-v7-21 版本中新增的一个 Widgets, 还有一个 CardView 会在下次介绍使用.官方介绍 RecyclerView 是 ListView 的升级版本,更加先进和灵活.我们写一个简单的实例例,来看一下究竟有多先进和灵活. build.gradle 配置 android { compileSdkVersion 'android-L' buildToolsVersion "20.0.0" defaultConfig

  • Android init.rc文件详解及简单实例

    Android init.rc文件详解 本文主要来自$ANDROID_SOURCE/system/init/readme.txt的翻译. 1 简述 Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得使用转义字符"\",如果在一行的末尾有一个反斜杠,那么

  • Android UI 实现老虎机详解及实例代码

    Android UI 实现老虎机详解 listview 的使用步骤 简单的listview老虎机实现 1.实现效果图 2.需要掌握的知识 listview的使用步骤 listview的Adapter接口的实现 listview中的MVC 3.知识详解 ListView 是一个控件,一个在垂直滚动的列表中显示条目的一个控件,这些条目的内容来自于一个ListAdapter .EditText Button TextView ImageView Checkbox 五大布局. 1.布局添加Listvie

随机推荐