天天看點

Kotlin實戰案例:帶你實作RecyclerView分頁查詢功能(仿照主流電商APP,可切換清單和網格效果)

随着Kotlin的推廣,一些國内公司的安卓項目開發,已經從Java完全切成Kotlin了。雖然Kotlin在各類程式設計語言中的排名比較靠後(據TIOBE釋出了 19 年 8 月份的程式設計語言排行榜,Kotlin竟然排名45位),但是作為安卓開發者,掌握該語言,卻已是大勢所趨了。

Kotlin的基礎用法,整體還是比較簡單的,網上已經有很多文章了,大家熟悉下即可。

此次案例,之是以選擇分頁清單,主要是因為該功能通用性強,涵蓋的技術點也較多,對開發者熟悉Kotlin幫助性較大。

案例的主要需求如下( 參考主流電商APP實作 ):

1、清單支援手勢滑動分頁查詢(滑動到底部時,自動查詢下一頁,直到沒有更多資料)

2、可切換清單樣式和網格樣式

3、切換樣式後,資料位置保持不變(如目前在第100條位置,切換樣式後,位置不變)

4、footview根據查詢狀态,顯示不同内容:

5、當查詢出錯時,再次點選footview,可重新發起請求(例如:網絡異常了)

6、當切換網格樣式時,footview應獨占一行

雖然是簡單案例,咱們開發時,也應先進行簡單的設計,讓各子產品、各類都各司其職、邏輯解耦,這樣大家學起來會更簡單一些。

此處,不畫類圖了,直接根據項目結構,簡單介紹一下吧:

1、pagedata 是指資料子產品,包含:

2、pageMangage 是指分頁管理子產品,将分頁的全部邏輯托管給該子產品處理。為了簡化分頁邏輯的實作,根據功能單一性進行了簡單拆分:

3、adapter 是指擴充卡子產品,主要用于定義各類擴充卡

4、utils 是指工具子產品,用于定義一些常用工具

在文章的最後,會将Demo源碼下載下傳位址分享給大家,以供參考。

1.1、DataInfo.kt 實體類

kotlin類中定義了屬性,則已包含了預設的get、set

1.2、DataSearch 資料通路類:

DataSearch類有兩個重點知識:

1.2.1、子線程異步查詢的實作
1.2.2、資料回調監聽

為了簡化分頁邏輯,讓大家更好了解,此處将分頁資料、分頁布局拆分出來,使其邏輯解耦,也便于代碼的管理維護。

2.1、PagesDataManager 分頁資料管理類

主要内容,包括:

2.2、PagesLayoutManager 分頁布局管理類

2.3、PagesManager 分頁管理類

主要内容,包含:

主要技術點,包括:

3.1、PagesAdapter 分頁擴充卡類

4.1、AppUtils 項目工具類

此案例中主要用于判斷網絡連接配接情況。

該類的主要技術點:Kotlin的共生對象、線程安全單例,詳見源碼:

5.1、MainActivity 首頁面,用于顯示分頁清單、切換分頁樣式(清單樣式、網格樣式)

MainActivity的布局頁面,使用了限制布局,層級嵌套少,且更簡單一些:

5.2、item布局(清單樣式),也是使用了限制布局:

5.3、item布局(網格樣式),仍然使用了限制布局:

5.4、footview布局

比較簡單,僅有一個文本控件:

分頁實作難點彙總:

1、切換RecyclerView展示樣式(清單樣式、網格樣式),保持資料位置不變

2、網格樣式時,footview獨占一行

3、直接在adapter中判斷是否滑動到了底部,比正常做法(監聽滑動坐标)更簡單一些

4、分頁狀态管控(資料加載中、沒有更多資料了、出錯了點選重試)

Kotlin主要技術點彙總:

1、多線程實作(Lambda表達式的應用)

2、異步回調(Lambda表達式的應用、高階函數)

3、共生對象

4、線程安全單例

5、其他略(都比較基礎了,大家熟悉下即可)

此篇文章主要是為了講解正常分頁的實作,是以隻是做了一些基礎的拆分解耦,如果想在項目中使用,建議還是抽象一下,擴充性會更好一些(如:footview接口化擴充、資料查詢接口化擴充等)。

如果有疑問,也歡迎留言咨詢O(∩_∩)O~

Demo下載下傳位址:

https://pan.baidu.com/s/1gH0Zcd0QXdm4mRNMqJgS8Q