Android在開發(fā)中的使用技巧之解決ScrollView嵌套RecyclerView出現(xiàn)的系列問題

根據(jù)已上線的app里總結(jié)出來的實用小技巧

相信大家都遇到過ScrollView嵌套RecyclerView或者RecyclerView嵌套RecyclerView來使用, 也會遇到一堆奇奇怪怪的問題, 比如滑動卡頓、數(shù)據(jù)加載不完、數(shù)據(jù)加載完后沒有停留在頂部等問題

今天我們就來寫一篇RecyclerView嵌套版本的解決方案

  • 今年六月份的IO大會把Kotlin用做Android開發(fā)的一級語言, 也讓這個語言在Android開發(fā)圈子里大火了一把, 所以今天的代碼是用Kotlin來實現(xiàn)(當然還是有Java版本的).

  • 由于Google公司大力推薦大家使用RecyclerView來代替ListViewGridView等等控件, 現(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嵌套ListViewGridView等控件出現(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)載請注明 原文出處
有錯誤請多多指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,835評論 2 45
  • 只要你真的想去這樣生活,你就一定可以做到這樣去生活。
    懶大叔閱讀 417評論 0 0
  • 大學以來,我很少給父母打電話。打電話也是匆匆?guī)拙渚蛼斓?。每次放假回家就渾身不舒服,好像被針扎著一樣?/div>
    改造貓貓閱讀 246評論 1 1
  • 歲月輕輕地觸摸 悠悠歌聲中最柔軟的角落 滴答滴答的雨聲 彈奏著雨燕的歡歌 懷揣在夢里的星星 在小小的心懷里閃爍 拈...
    伊萬公津閱讀 324評論 4 2

友情鏈接更多精彩內(nèi)容