快把你繁重的viewpager換成recyclerview吧

SamanLan發表於2017-12-13

相信viewpager+fragment在各個APP都已經是熟面孔了,大家對他們應該都比較熟悉了。 最近在專案中使用的這個組合被吐槽有各種問題,因為vp中使用的fragment分量比較重(view數目比較多),而且vp巢狀的佈局也存在一些問題(NestScroll巢狀vp+recyclerview等),暴露出了上下滑動靈敏,左右滑動卡頓等問題。 想過的解決方案

  1. 自定義view。(沒達到預期效果,對於滑動處理同樣存在問題)
  2. recyclerview第一項巢狀vp。(相信很多APP都是這樣做的,不過可能是由於上述所說,fragment分量問題,vp滑動沒有問題,但rv滑動到第一項就出現卡頓了)
  3. recyclerview第一項巢狀recyclerview。(你沒看錯,第一項巢狀一個橫向佈局的rv,最後結果是無比的順暢)

現在說說第3點的實現

  1. rv實現vp效果,這種效果github上面一搜估計就會有了,不過!!!現在是谷歌原生支援了!!!普天同慶。 而且程式碼十分簡單粗暴,一行程式碼實現vp滑動效果(關於Snaphelper,自行搜尋一下)

實現

  1. 不過這種實現方式對比vp來說也存在一些缺點,缺少了一些相應的監聽或者API。 比如滑動結束監聽、獲取當前position、左滑還是右滑。不過上有政策下有對策,只需要我們手動加一些程式碼即可 首先是獲取當前position和左滑還是右滑

自己實現

然後是滑動結束監聽

滑動結束

不過當你呼叫

滑動到指定某一項
這個API的時候,上面那個滑動狀態改變監聽事件是不會觸發的,故需要自己去呼叫滑動結束的事件,缺點之一

還有一個缺點就是沒有viewpager那種Transformer效果,不過同樣的,rv帶來的效率和流暢性不是vp+fragment能比的。故針對專案需要,各取所需吧!!

相關文章