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

android RecyclerView添加footerview詳解

 更新時(shí)間:2022年01月16日 15:19:14   作者:橘子先生z  
大家好,本篇文章主要講的是android RecyclerView添加footerview詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
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
        你的綁定事件不用動(dòng)
    }
    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的類型,一個(gè)是正常的,一個(gè)是底部view

 companion object {
        const val TYPE_FOOTER: Int = 1
        const val TYPE_NORMAL: Int = 0
    }
2.定義一個(gè)是否加FooterView的Boolean變量
(1)如果你的底部view是固定的,就不需要解析多次xml布局,直接在onCreateViewHolder方法里解析一次布局。
var isFooterView: Boolean = false
(2)如果你的底部布局是變化的,那這里設(shè)置的就應(yīng)該是
var isFooterView: View

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

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

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

4.重寫getItemViewType
根據(jù)isFooterView判斷是否加FooterView&&item是不是最后一個(gè)來定位最后一個(gè)item,其他的ViewType都是TYPE_NORMAL

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

5.itemCount
這個(gè)方法很重要,是計(jì)算有多少個(gè)Item的,上面也用到了。
很簡單,添加了FooterView,ItemCount加1

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

6.接下來創(chuàng)建一個(gè)空ViewHolder,當(dāng)然也可以復(fù)用其他已創(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
        你的綁定事件不用動(dòng)
    }

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

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

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

在絕大多數(shù)的時(shí)候holder.getAdapterPosition()和holder.getLayoutPosition()是沒有任何區(qū)別的,因?yàn)閮烧邤?shù)據(jù)的不同在16ms之內(nèi)

總結(jié)

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

相關(guān)文章

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

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

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

    詳解Android應(yīng)用中使用TabHost組件進(jìn)行布局的基本方法

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

    Android應(yīng)用啟動(dòng)速度優(yōu)化

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

    Android消息處理機(jī)制Looper和Handler詳解

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

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

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

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

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

    android Chronometer控件使用大全

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

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

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

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

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

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

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

最新評(píng)論

乌兰浩特市| 宁化县| 调兵山市| 额尔古纳市| 通江县| 永德县| 寿光市| 辉县市| 青神县| 峨眉山市| 邵阳市| 营口市| 红桥区| 柏乡县| 连山| 祁门县| 芜湖县| 广南县| 铁力市| 左云县| 子洲县| 黔南| 定西市| 海门市| 屏边| 米脂县| 宣汉县| 平邑县| 全州县| 凌源市| 平塘县| 黄冈市| 乐山市| 揭西县| 普安县| 太和县| 纳雍县| 土默特右旗| 尼勒克县| 彩票| 岳阳市|