NestedScrollView+RecyclerView优雅的

作者: dongjunkun | 来源:发表于2017-01-23 17:13 被阅读26862次

    在此之前,经历过ScrollView嵌套ScrollView滑动冲突,ScrollView与ListView嵌套滑动冲突等等,网上解决方法比较多暂不赘述了,RecyclerView出来已经差不多2年了,ListView可以说已经成为了过去式了,现在开发完全使用RecyclerView就行了。

    我亲自试验过,RecyclerView嵌套RecyclerView是不存在滑动冲突的,ScrollView嵌套RecyclerView也会存在显示不全的问题,滑动也有一点点粘连的感觉不是太流畅,NestedScrollView嵌套RecyclerView不会存在显示不全的问题,代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.NestedScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"/>
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"/>
        </LinearLayout>
    
    </android.support.v4.widget.NestedScrollView>
    

    上面的代码只是简单的嵌套而已,但是还有一个小问题,触摸到RecyclerView的时候滑动还有些粘连的感觉,只需要在代码中设置

    mRecyclerView.setNestedScrollingEnabled(false);
    

    就可以完美的解决这个问题。

    欢迎转载,转载请注明原文链接,谢谢配合!!

    相关文章

      网友评论

      • longzekai:可以,解决了我的问题。
      • Aiden_9:怎么都是这样复制的,根本解决不了问题,或者说只解决了部分问题。5.0一下的根本没用
      • dfc0ce271de5:这样的话如果有粘性头怎么粘性头就失效了呢?
      • zp_风:这种写发RecyclerView 能够分页吗
      • YanYang6:recyclerView只显示一个,后面的不显示
      • e05077232c12:很好用 比重写LayoutManager方便多了
      • 夙愿終不毁:只针对API21以上有效,如何适配以下的?
        dongjunkun:@夙愿終不毁 额,好像没遇到这个问题
      • 幻化万千戏红尘:非常感谢,原来是recycleview里面的控件抢占了焦点。android:focusable="true"
        android:focusableInTouchMode="true"正解
      • 月夜将白:可以的,点赞,解决了问题.
        Evan_we:真的可以吗?
        我怎么试了不行啊。。。。。。这么尴尬的吗
      • v587的毅哥:完美。一行代码。
      • hexiaosa:可以看一下这篇文章,一句话就可以解决ScrollView和RecycleView的滑动冲突,http://www.jianshu.com/p/7e17e48e6baf
      • 文武锅:这个就没意义了,一旦把recyclerview或者listview高度完全展开,他们自身的滑动根本就无效了,哪儿来的存在滑动冲突,复用机制也废掉了,一旦数据量大了必定oom,还不如自己LinearyLayout addView进去,还比recyclerview和listview性能好一点
        dongjunkun: @果汁_de5e 愿闻其详😀
        果汁_de5e:其实是有解决方法的 NestedScrolling 用这个 完美解决各种嵌套滑动的问题 scrollview 和 recyclerview 可以完美兼容 复用没有任何问题
        dongjunkun:是这样的,一般情况可以用一个RecyclerView就可以实现,通过添加header或者footer,我这个属于一种比较偷懒的写法,一般用于详情页面或者固定列表页面,数据多我也不建议这样写
      • 1a7ca2d05391:解决了我遇到的问题。谢谢:grin:
      • 狂猿:NestedScrollView与RecyclerVIew嵌套后,recyclerVIew的复用机制就不起作用了,加载数据的时候,会将所有的数据都加载出来,对吗?
        dongjunkun: @Jokerli007 是的
      • rivc:请问scrollview包住recyclerview 然后recyclerview.scrollToPosition(20) 失效,请问什么原因呢
      • arkinzheng:我测试了以下,NestedScrollView+RecyclerView在显示上没什么问题,但会使RecyclerView在初始化就将所有的item都加载出来。而且RecyclerView的scrollToPosition(int position)也失效了。
        dongjunkun: @arkinzheng 嗯,也可以使用一个recyclerview添加header和footer就行了
      • 76ffef5441ab:这个哎scr嵌套list这么好用吗
        76ffef5441ab: @dongjunkun 多谢指点
        dongjunkun: @会编程的_宁采臣 试试就知道了
      • lixinxin:我在recyclerView 上面 添加了两个 TextView
        dongjunkun:RecyclerView是在LinearLayout里面的,如果是FrameLayout或者RelativeLayout如果没有设置相关属性,会覆盖的
      • lixinxin:好像有问题 默认显示的是 recyclerView 的第一条 不是顶部的 TextView 。
        dongjunkun:@lixinxin 我知道问题了,你的RecyclerView里面有控件抢了焦点,在你的RecyclerView所在的最顶层的View添加
        android:focusable="true"
        android:focusableInTouchMode="true"应该可以解决你的问题
        lixinxin:@dongjunkun 第一次 进去 显示的是recyclerView ,textView 下拉后可以显示 。你的代码可以看一下吗?
        dongjunkun:额,你再确认下,我这边没有问题的,可以改改上面的代码,TextView换成明显一点的布局(或者改个颜色),我在项目中开始最顶层是NestedScrollView显示没问题,后续最外层还添加了SwipeRefreshLayout
      • 小王泽哥:coordinationview和recycle view滑动冲突怎么办
        dongjunkun: @小王泽哥 额,还没碰到过

      本文标题:NestedScrollView+RecyclerView优雅的

      本文链接:https://www.haomeiwen.com/subject/wuhkuttx.html