ScrollView
嵌套RecyclerView
或者RecyclerView
嵌套RecyclerView
來使用, 也會遇到一堆奇奇怪怪的問題, 好比滑動卡頓、數據加載不完、數據加載完後沒有停留在頂部等問題今天咱們就來寫一篇RecyclerView
嵌套版本的解決方案java
今年六月份的IO
大會把Kotlin
用作Android
開發的一級語言, 也讓這個語言在Android
開發圈子裏大火了一把, 因此今天的代碼是用Kotlin
來實現(固然仍是有Java
版本的).android
因爲Google
公司大力推薦你們使用RecyclerView
來代替ListView
和GridView
等等控件, 如今愈來愈多的開發者都已經上手了RecyclerView
了.git
也推薦你們趕忙使用RecyclerView
來代替ListView
等等, 好處太多了也就不提了, 配合github
上的一個開源工程使用簡直絕配BaseRecyclerViewAdapterHelpergithub
進入正題, 很少BB了
app
兩層
RecyclerView
嵌套這種需求也是很常見的一個需求了, 下面圖片就是列舉的一個案例ide
一個頁面中有個多個
RecyclerView
時,爲了保證數據能完整加載, 通常都是在最外層加上一個ScrollView
, 然而出現的一系列問題, 讓人頭大, 固然本文章也都提供瞭解決方案佈局
以前也寫過一篇ScrollView
嵌套ListView
或GridView
等控件出現的各類問題的解決的最佳方案, 傳送門點我this
recyclerView.setLayoutManager(new LinearLayoutManager(this){ @Override public boolean canScrollVertically() { //解決ScrollView裏存在多個RecyclerView時滑動卡頓的問題 //若是你的RecyclerView是水平滑動的話能夠重寫canScrollHorizontally方法 return false; } }); //解決數據加載不完的問題 recyclerView.setNestedScrollingEnabled(false); recyclerView.setHasFixedSize(true); //解決數據加載完成後, 沒有停留在頂部的問題 recyclerView.setFocusable(false);
recyclerView.layoutManager = object : LinearLayoutManager(context) {
//解決RecyclerView嵌套RecyclerView滑動卡頓的問題 //若是你的RecyclerView是水平滑動的話能夠重寫canScrollHorizontally方法 override fun canScrollVertically() = false } //解決數據加載不完的問題 recyclerView.isNestedScrollingEnabled = false recyclerView.setHasFixedSize(true) //解決數據加載完成後, 沒有停留在頂部的問題 recyclerView.isFocusable = false
關於嵌套後滑動卡頓或者焦點之類的問題
使用了上面的方法還沒法解決就把佈局中的RecyclerView
外層的ScrollView
換成NestedScrollView
就能夠解決了spa
<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>