1. 程式人生 > >RecyclerView實現複雜頁面

RecyclerView實現複雜頁面

近日,三星Galaxy S8正式釋出,使用了曲屏無邊超大螢幕,屏佔比高達84%。為了獲得更大的屏佔比,S8甚至取消了正面指紋識別的設計,將指紋識別移到了後置攝像頭右側。另外還增加了語音助手Bixby,對蘋果Siri的進行公開叫板。不知道這一旗艦機型能否挽回去年“炸彈”Note 7給公司形象帶來的損害。

作者簡介

本篇來自 哦罷了 的投稿,分享瞭如何使用 RecyclerView 實現多種佈局的列表,希望能夠幫助到大家。最後不要忘記明天還要上班喲!

哦罷了 的部落格地址:

http://blog.csdn.net/iamdingruihaha

正文

相信很多安卓開發的朋友,尤其是剛從事安卓開發的朋友,當產品經理遞過來一張複雜頁面的設計圖時,都會有一種茫然的感覺,在心裡想著如何實現,然後網上搜索如何實現複雜佈局頁面,當初我也是這麼過來的, 可以說踩了很多很大的坑,所以決定寫下這篇部落格 ,供各位猿猿參觀 , 想相信看完此篇,絕對是最後一篇,不用再找了,當然此篇為進階篇。如果你對 RecyclerView 還不熟悉,建議先了解 RecyclerView,熟悉其基本使用。

言歸正傳,先來看一下效果圖:

gif錄出來有點怪,所以就截圖了

下面我來分析一下這種複雜介面的具體實現思路,當然這裡非常感謝   liaoinstan 大神的文章

http://blog.csdn.net/liaoinstan/article/details/52671101

朋友可以看一下,最初我也是看了此篇,但是此篇並非完美,在此我進一步總結一下 。

如果不是瀑布流, 那就很簡單了,借鑑一下liaoinstan的圖片

如果實現此圖,liaoinstan給瞭如下兩種方案

  • 第一種

這裡 recyclerview5 應該還是列表管理器, 懶得畫圖了,意思一樣 。

這種方案構思就是 recyclerview 裡面巢狀 多recyclerview,構思簡單,編寫也是行如流水,能夠實現需求,但是問題來了,以下是重點,這種多巢狀的寫法,在上拉載入的時候,拉到後面基本就會很卡,就算釋放glide(或者其他圖片載入框架)的記憶體也是釋放不掉,直至oom或者卡死不動

,所以這種巢狀思路只適合沒有載入更多的的情況。

  • 第二種

這種思路里面最重要的方法就是:

liaoinstan大神已經給了具體程式碼和思路,完美實現功能,非常感謝。

如果需求是帶瀑布流的

那麼,第一種情況裡面的 onAttachedToRecyclerView方法 瀑布流管理器裡面就不存在,因此無法使用,只能另尋他法,liaoinstan大神推薦 TwowayView 能實現上圖這種效果,但是, 呵呵,不好意思,當你用TwowayView寫實際應用時, 需要網路載入時, 問題出現了,那就是你來回下拉重新整理幾次,佈局上面就會有一塊白的空白區域, 直至最後你的佈局完全看不見, 只剩下一片白。

我沒有解決此問題。當時我寫我們公司的應用時, 寫到這裡的時候,我就一臉懵逼了, 然後就用最最古老的辦法,直接scrollview裡面巢狀幾個recyclerview,寫到最後還是意料之中出現問題了,上拉載入到最後還是會卡頓,而且在6.0以上高度總是有問題。

到這裡,我差點想和產品說我們不用瀑布流好不好,但我又從新搜了一下,在瀑布流管理器裡面有 LayoutParams.setFullSpan(true) 方法,在:

onCreateViewHolder(ViewGroup parent, int viewType)

總體思路就是,把下面的瀑布流部分作為一種 type,其他無需載入更多的佈局放在 recyclerview 裡面。使用此方法使這一行佔滿全屏,這是我到現在總結出來的最好實現方式。

思路圖如下:

部分程式碼如下:

這個方法 在大神的文章裡只是副作用提了一下, 光想著 TwowayView 了所以沒在意 ,最後還是此方法解決了這種需求。

總結:本人只是理論性的總結了複雜佈局的實現方式,以及一些坑 , 避免各位浪費時間和精力 ,鄙人在此獻醜了,程式碼已經全部上傳,github專案原始碼:

https://github.com/385841539/RecycleviewPage