最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android RecyclerView添加footerview詳解

 更新時間:2022年01月16日 15:19:14   作者:橘子先生z  
大家好,本篇文章主要講的是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 設(shè)置的其他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)如果你的底部布局是變化的,那這里設(shè)置的就應該是
var isFooterView: View

3.FooterView相關(guān)方法

//設(shè)置FooterView
fun setFooterView() {
        this.isFooterView = true
        notifyItemInserted(itemCount)
       //這個方法是通知Adapter有新的Item插入
    }

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

4.重寫getItemViewType
根據(jù)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.接下來創(chuàng)建一個空ViewHolder,當然也可以復用其他已創(chuàng)建的ViewHolder

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

7.重寫onCreateViewHolder,根據(jù)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 設(shè)置的其他VIewHolder
    }

8.重寫onBindViewHolder,如果viewType為TYPE_FOOTER就跳過

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

9.最后說一下getAdapterPosition和getLayoutPosition
建議如下:

當你需要綁定數(shù)據(jù)的時候使用holder.getAdapterPosition();來實時獲取

當你進行點擊/滑動等監(jiān)聽事件用holder.getLayoutPosition();來獲取位置

在絕大多數(shù)的時候holder.getAdapterPosition()和holder.getLayoutPosition()是沒有任何區(qū)別的,因為兩者數(shù)據(jù)的不同在16ms之內(nèi)

總結(jié)

到此這篇關(guān)于android RecyclerView添加footerview詳解的文章就介紹到這了,更多相關(guān)RecyclerView添加footerview內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例

    RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例

    本篇文章主要介紹了RecyclerView通過GridLayoutManager實現(xiàn)多樣式布局的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解Android應用中使用TabHost組件進行布局的基本方法

    詳解Android應用中使用TabHost組件進行布局的基本方法

    這篇文章主要介紹了Android應用中使用TabHost組件進行布局的基本方法,不繼承TabActivity并以最基本的布局文件方式進行布局,需要的朋友可以參考下
    2016-04-04
  • Android應用啟動速度優(yōu)化

    Android應用啟動速度優(yōu)化

    這篇文章主要介紹了Android應用啟動速度優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android消息處理機制Looper和Handler詳解

    Android消息處理機制Looper和Handler詳解

    Android應用程序是通過消息來驅(qū)動的,系統(tǒng)為每一個應用程序維護一個消息隊例,應用程序的主線程不斷地從這個消息隊例中獲取消息(Looper),然后對這些消息進行處理(Handler),這樣就實現(xiàn)了通過消息來驅(qū)動應用程序的執(zhí)行,本文將詳細分析Android應用程序的消息處理機制
    2014-09-09
  • Android兩種輪詢的實現(xiàn)方法

    Android兩種輪詢的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Android兩種輪詢的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Android關(guān)于獲取時間的記錄(小結(jié))

    Android關(guān)于獲取時間的記錄(小結(jié))

    這篇文章主要介紹了Android關(guān)于獲取時間的記錄(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • android Chronometer控件使用大全

    android Chronometer控件使用大全

    Chronometer是一個簡單的計時器,這篇文章主要介紹了android Chronometer控件簡單使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Android自定義View實現(xiàn)照片裁剪框與照片裁剪功能

    Android自定義View實現(xiàn)照片裁剪框與照片裁剪功能

    這篇文章主要介紹了Android自定義View實現(xiàn)照片裁剪框與照片裁剪功能的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Android仿QQ空間主頁面的實現(xiàn)

    Android仿QQ空間主頁面的實現(xiàn)

    今天模仿安卓QQ空間,打開程序的啟動畫面和導航頁面我就不做了,大家可以模仿微信的那個做一下,很簡單。這次主要做一下主頁面的實現(xiàn),感興趣的朋友可以參考下
    2013-01-01
  • Android 模擬器(JAVA)與C++ socket 通訊 分享

    Android 模擬器(JAVA)與C++ socket 通訊 分享

    Android 模擬器(JAVA)與C++ socket 通訊 分享,需要的朋友可以參考一下
    2013-05-05

最新評論

靖宇县| 远安县| 石景山区| 乐亭县| 重庆市| 肃北| 蓬溪县| 四川省| 治县。| 延川县| 新和县| 丰镇市| 盐城市| 郓城县| 广东省| 平舆县| 宝丰县| 河东区| 灵石县| 班玛县| 婺源县| 临邑县| 井冈山市| 遵化市| 新泰市| 五寨县| 西林县| 拜泉县| 襄汾县| 信丰县| 桓仁| 九江县| 专栏| 弥勒县| 舞钢市| 甘孜| 准格尔旗| 轮台县| 铜山县| 三江| 揭阳市|