RecyclerView中的position

RecyclerView相關(guān)的文章預(yù)計(jì)會(huì)寫六篇肚菠,此處是第一篇

  1. RecyclerView中的position
  2. RecyclerView中的DiffUtil
  3. RecyclerView中的SnapHelper
  4. RecyclerView中的Selection
  5. RecyclerView中的ConcatAdapter
  6. RecyclerView中的Glide預(yù)加載
  7. RecyclerView源碼淺析

在recyclerview中有兩種類型的position:

  1. layout position:這是從LayoutManager視角看到的position时捌,它是item在布局中最新的計(jì)算位置奢讨;
  2. adapter position:這是從adapter視角看到的position塞茅,它是item在adapter中的位置;

這兩種position在絕大多數(shù)情況下是相同的吏廉,除了adapter notify調(diào)用之后到布局計(jì)算完成之前,這兩個(gè)position可能存在偏差。

  • RecyclerView.ViewHolder#getLayoutPosition返回viewholder在最新布局中的位置畦戒。這個(gè)位置主要由RecyclerView組件使用,以便在RecyclerView延遲處理適配器更新時(shí)保持一致邀层。
  • RecyclerView#findViewHolderForLayoutPosition(int position)返回在最新布局中給定位置的ViewHolder涛目。

如果你想獲取用戶在屏幕上看到的item估蹄,建議使用以上兩種方式讯赏。

  • RecyclerView.ViewHolder#getAbsoluteAdapterPosition返回item在adapter中的位置,這個(gè)位置是相對(duì)于RecyclerView的adapter的。這個(gè)值和getLayoutPosition可能不同垢村,在布局未更新之前。RecyclerView不會(huì)處理任何更新直到下一次布局遍歷麻昼,這會(huì)導(dǎo)致在用戶從屏幕中看到的內(nèi)容和adapter實(shí)際內(nèi)容之間短暫的不一致。這個(gè)短暫的瞬間一般小于16ms。
    如果你觸發(fā)了notifyDataSetChanged,直到下一次布局更新完成,該方法返回值都會(huì)是NO_POSITION。
  • RecyclerView.ViewHolder#getAdapterPosition該方法已經(jīng)廢棄了,在嵌套的adapter中亲桥,該方法的返回值是不準(zhǔn)確的厅目。
  • RecyclerView.ViewHolder#getBindingAdapterPosition 返回此 ViewHolder 的item在adapter中的位置拗馒,這個(gè)位置是相對(duì)于綁定它的適配器的位置。如果您正在查詢?cè)L問適配器內(nèi)容的位置友绝,您應(yīng)該使用 getBindingAdapterPosition。

getAbsoluteAdapterPosition和getBindingAdapterPosition基本一致,只不過前者是相對(duì)于RecyclerView的,后者是相對(duì)于adapter的缰冤。

相對(duì)位置和絕對(duì)位置.png

引用這幅圖可以幫助我們很好的理解兩者的區(qū)別。

總結(jié)一下

layout position 和adapter position在大多數(shù)情況下是一致的畦攘,只是在RecyclerView刷新不及時(shí)兩者可能存在偏差叹螟,如果想獲取用戶真實(shí)看到的內(nèi)容有缆,建議使用Layout position栈虚。adapter position因?yàn)榇嬖赾ontact adapter的情況分為相對(duì)位置和絕對(duì)位置粘姜,如果我們用不到contact adapter豺裆,兩者可以認(rèn)為是一樣的蔑歌。

參考:
1劫灶、RecyclerView
2滞详、「RecyclerView中的位置」你真的會(huì)正確獲取Item的位置么岸啡?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蟀拷,隨后出現(xiàn)的幾起案子此衅,更是在濱河造成了極大的恐慌,老刑警劉巖欢嘿,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也糊,死亡現(xiàn)場(chǎng)離奇詭異虑省,居然都是意外死亡绩鸣,警方通過查閱死者的電腦和手機(jī)呀闻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門山涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事于颖∪樵酰” “怎么了彩郊?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚪缀。 經(jīng)常有香客問我秫逝,道長,這世上最難降的妖魔是什么询枚? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任违帆,我火速辦了婚禮,結(jié)果婚禮上金蜀,老公的妹妹穿的比我還像新娘刷后。我一直安慰自己的畴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布尝胆。 她就那樣靜靜地躺著丧裁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪含衔。 梳的紋絲不亂的頭發(fā)上煎娇,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音贪染,去河邊找鬼缓呛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杭隙,可吹牛的內(nèi)容都是我干的哟绊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺渗,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼匿情!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起信殊,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤炬称,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涡拘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玲躯,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鳄乏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跷车。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橱野,死狀恐怖朽缴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情水援,我是刑警寧澤密强,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蜗元,受9級(jí)特大地震影響或渤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奕扣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一薪鹦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦池磁、人聲如沸奔害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舀武。三九已至,卻和暖如春离斩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘪匿。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工跛梗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棋弥。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓核偿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顽染。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漾岳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容