RecyclerView学习(二)之缓存探索
生活随笔
收集整理的這篇文章主要介紹了
RecyclerView学习(二)之缓存探索
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
RecyclerView學習(二)之緩存探索
- 探索緩存
學而不思則罔,思而不學則殆
相關文檔:
RecyclerView學習(一)之應用
RecyclerView學習(二)之緩存探索
RecyclerView學習(三)之緩存原理分析
我們都知道RecyclerView有緩存有復用,但是緩存的現(xiàn)象是什么呢?
今天我們就來探索一下緩存復用的現(xiàn)象,然后通過現(xiàn)象去研究本質
探索緩存
class StudyOneAdapter(list: List<Bean?>) : RecyclerView.Adapter<StudyOneAdapter.TestHolder>() {private val sTAG = "zy.StudyOneAdapter"private var mList: List<Bean?> = mutableListOf<Bean?>()private var mCreateNum = 0private val mHolderList = mutableSetOf<TestHolder>()init {mList = list}//創(chuàng)建Holderoverride fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestHolder {Log.d(sTAG, "onCreateViewHolder")mCreateNum++...}//綁定數(shù)據(jù),如果有復用會直接返回復用的Holderoverride fun onBindViewHolder(holder: TestHolder, position: Int) {mHolderList.add(holder)Log.d(sTAG, "onBindViewHolder $mCreateNum ${mHolderList.size} ${holder.lastPosition} <-> $position $holder ")//綁定數(shù)據(jù)和記錄之前position在Holder中...}...省略掉關鍵信息,在Adapter初始化添加兩個屬性變量,mCreateNum ,mHolderList
mCreateNum 在執(zhí)行onCreateViewHolder的時候會加1
mHolderList 是一個HashSet,在onBindViewHolder方法中把返回來的Holder加入到Set中,我們知道Set不會保存重復對象
itemView左上角表示當前position
右上角表示:lastPosition --> nowPosition (lastPositon默認為-1,還沒有復用)
再測試一下滑動過程中的log表現(xiàn)
2020-07-17 08:27:08.265 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:27:08.271 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=-1 --> nowPosition=10 TestHolder{f43dac position=10 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.281 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=0 --> nowPosition=11 TestHolder{51b6336 position=11 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.289 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=1 --> nowPosition=12 TestHolder{799136c position=12 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.305 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=2 --> nowPosition=13 TestHolder{14ca988 position=13 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.311 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=11 mHolderList.size=11 lastPosition=3 --> nowPosition=14 TestHolder{8e63464 position=14 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.323 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onCreateViewHolder 2020-07-17 08:27:08.329 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=-1 --> nowPosition=15 TestHolder{bf047c8 position=15 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.342 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=5 --> nowPosition=16 TestHolder{27ad85c position=16 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.356 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=6 --> nowPosition=17 TestHolder{9e6a978 position=17 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.372 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=7 --> nowPosition=18 TestHolder{51bd34a position=18 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.388 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=8 --> nowPosition=19 TestHolder{cbcbc87 position=19 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.405 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=9 --> nowPosition=20 TestHolder{bc8ec50 position=20 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.424 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=10 --> nowPosition=21 TestHolder{f43dac position=21 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-07-17 08:27:08.439 30898-30898/com.example.recyclerviewstudy D/zy.StudyOneAdapter: onBindViewHolder mCreateNum=12 mHolderList.size=12 lastPosition=11 --> nowPosition=22 TestHolder{51b6336 position=22 id=-1, oldPos=-1, pLpos:-1 no parent}分析一下LOG給我們提供的信息
那就有問題:
當然以上都是猜測,后續(xù)我們就帶著問題來分析復用邏輯
總結
以上是生活随笔為你收集整理的RecyclerView学习(二)之缓存探索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5月份 Github 上最热的十个 Py
- 下一篇: 重磅!GitHub官方App官宣发布了