相信viewpager+fragment在各個APP都已經是熟面孔了,大家對他們應該都比較熟悉了。 最近在專案中使用的這個組合被吐槽有各種問題,因為vp中使用的fragment分量比較重(view數目比較多),而且vp巢狀的佈局也存在一些問題(NestScroll巢狀vp+recyclerview等),暴露出了上下滑動靈敏,左右滑動卡頓等問題。 想過的解決方案
- 自定義view。(沒達到預期效果,對於滑動處理同樣存在問題)
- recyclerview第一項巢狀vp。(相信很多APP都是這樣做的,不過可能是由於上述所說,fragment分量問題,vp滑動沒有問題,但rv滑動到第一項就出現卡頓了)
- recyclerview第一項巢狀recyclerview。(你沒看錯,第一項巢狀一個橫向佈局的rv,最後結果是無比的順暢)
現在說說第3點的實現
- rv實現vp效果,這種效果github上面一搜估計就會有了,不過!!!現在是谷歌原生支援了!!!普天同慶。 而且程式碼十分簡單粗暴,一行程式碼實現vp滑動效果(關於Snaphelper,自行搜尋一下)
- 不過這種實現方式對比vp來說也存在一些缺點,缺少了一些相應的監聽或者API。 比如滑動結束監聽、獲取當前position、左滑還是右滑。不過上有政策下有對策,只需要我們手動加一些程式碼即可 首先是獲取當前position和左滑還是右滑
然後是滑動結束監聽
不過當你呼叫
這個API的時候,上面那個滑動狀態改變監聽事件是不會觸發的,故需要自己去呼叫滑動結束的事件,缺點之一還有一個缺點就是沒有viewpager那種Transformer效果,不過同樣的,rv帶來的效率和流暢性不是vp+fragment能比的。故針對專案需要,各取所需吧!!