根據(jù)已上線的app里總結(jié)出來的實用小技巧
相信大家都遇到過ScrollView嵌套RecyclerView或者RecyclerView嵌套RecyclerView來使用, 也會遇到一堆奇奇怪怪的問題, 比如滑動卡頓、數(shù)據(jù)加載不完、數(shù)據(jù)加載完后沒有停留在頂部等問題
今天我們就來寫一篇RecyclerView嵌套版本的解決方案
今年六月份的
IO大會把Kotlin用做Android開發(fā)的一級語言, 也讓這個語言在Android開發(fā)圈子里大火了一把, 所以今天的代碼是用Kotlin來實現(xiàn)(當然還是有Java版本的).由于
Google公司大力推薦大家使用RecyclerView來代替ListView和GridView等等控件, 現(xiàn)在越來越多的開發(fā)者都已經(jīng)上手了RecyclerView了.也推薦大家趕緊使用
RecyclerView來代替ListView等等, 好處太多了也就不提了, 配合github上的一個開源工程使用簡直絕配BaseRecyclerViewAdapterHelper
進入正題, 不多BB了
1. 第一種情況
兩層
RecyclerView嵌套這種需求也是很常見的一個需求了, 下面圖片就是列舉的一個案例

RecyclerView嵌套RecyclerView示例
2.第二種情況
一個頁面中有個多個
RecyclerView時,為了保證數(shù)據(jù)能完整加載, 一般都是在最外層加上一個ScrollView, 然而出現(xiàn)的一系列問題, 讓人頭大, 當然本文章也都提供了解決方案

ScrollView嵌套兩個RecyclerView示例
之前也寫過一篇ScrollView嵌套ListView或GridView等控件出現(xiàn)的各種問題的解決的最佳方案, 傳送門點我
-
Java版本
recyclerView.setLayoutManager(new LinearLayoutManager(this){
@Override
public boolean canScrollVertically() {
//解決ScrollView里存在多個RecyclerView時滑動卡頓的問題
//如果你的RecyclerView是水平滑動的話可以重寫canScrollHorizontally方法
return false;
}
});
//解決數(shù)據(jù)加載不完的問題
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(true);
//解決數(shù)據(jù)加載完成后, 沒有停留在頂部的問題
recyclerView.setFocusable(false);
-
Koltin版本
recyclerView.layoutManager = object : LinearLayoutManager(context) {
//解決RecyclerView嵌套RecyclerView滑動卡頓的問題
//如果你的RecyclerView是水平滑動的話可以重寫canScrollHorizontally方法
override fun canScrollVertically() = false
}
//解決數(shù)據(jù)加載不完的問題
recyclerView.isNestedScrollingEnabled = false
recyclerView.setHasFixedSize(true)
//解決數(shù)據(jù)加載完成后, 沒有停留在頂部的問題
recyclerView.isFocusable = false
-
切記,切記,切記, 重要的事情說三遍, 還解決不了的時候看這里
關(guān)于嵌套后滑動卡頓或者焦點之類的問題
使用了上面的方法還無法解決就把布局中的RecyclerView外層的ScrollView換成NestedScrollView就可以解決了
大概就改成這樣
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
如果還有遇到什么其他的嵌套之類出現(xiàn)的問題可以在評論里留言
轉(zhuǎn)載請注明 原文出處
有錯誤請多多指正!