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

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

之前也寫過(guò)一篇ScrollView嵌套ListView或GridView等控件出現(xiàn)的各種問(wèn)題的解決的最佳方案, 傳送門點(diǎn)我
-
Java版本
recyclerView.setLayoutManager(new LinearLayoutManager(this){
@Override
public boolean canScrollVertically() {
//解決ScrollView里存在多個(gè)RecyclerView時(shí)滑動(dòng)卡頓的問(wèn)題
//如果你的RecyclerView是水平滑動(dòng)的話可以重寫canScrollHorizontally方法
return false;
}
});
//解決數(shù)據(jù)加載不完的問(wèn)題
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(true);
//解決數(shù)據(jù)加載完成后, 沒(méi)有停留在頂部的問(wèn)題
recyclerView.setFocusable(false);
-
Koltin版本
recyclerView.layoutManager = object : LinearLayoutManager(context) {
//解決RecyclerView嵌套R(shí)ecyclerView滑動(dòng)卡頓的問(wèn)題
//如果你的RecyclerView是水平滑動(dòng)的話可以重寫canScrollHorizontally方法
override fun canScrollVertically() = false
}
//解決數(shù)據(jù)加載不完的問(wèn)題
recyclerView.isNestedScrollingEnabled = false
recyclerView.setHasFixedSize(true)
//解決數(shù)據(jù)加載完成后, 沒(méi)有停留在頂部的問(wèn)題
recyclerView.isFocusable = false
-
切記,切記,切記, 重要的事情說(shuō)三遍, 還解決不了的時(shí)候看這里
關(guān)于嵌套后滑動(dòng)卡頓或者焦點(diǎn)之類的問(wèn)題
使用了上面的方法還無(wú)法解決就把布局中的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)的問(wèn)題可以在評(píng)論里留言
轉(zhuǎn)載請(qǐng)注明 原文出處
有錯(cuò)誤請(qǐng)多多指正!