24.Android ScrollView嵌套RecyclerView的冲突解决

情景

开发过程中,经常会遇到ScrollView嵌套RecyclerView。但是实际操作后,会发现拖动RecyclerView时,会有或多或少的卡顿,这种便是滑动冲突。在此之前,经历过ScrollView嵌套ScrollView滑动冲突,ScrollView与ListView嵌套滑动冲突等等,网上解决方法比较多暂不赘述了,RecyclerView出来已经差不多4年了,ListView可以说已经成为了过去式了,现在开发完全使用RecyclerView就行了。

解决方案:NestedScrollView+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);

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

新的问题

关于NestedScrollView + RecyclerView页面载入时总是滑动到最底部

解决方案

项目中遇到页面载入时总是滑动到最底部,原因是焦点在页面底部;解决方法就是在根布局设置

android:descendantFocusability="blocksDescendants" ;

android:descendantFocusability 有三种值:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,046评论 25 709
  • android在嵌套滑动的时候会产生滑动冲突。之前我也碰到,但是以前的笔记本丢失了,所以只能重新再写一章。 一.会...
    键盘上的麒麟臂阅读 11,373评论 1 13
  • 最近发现自己负责的项目中,有使用 ScrollView 嵌套 RecyclerView 的地方,但是没有做任何针对...
    Coralline_xss阅读 48,218评论 10 56
  • 告别了炎夏的燥热与不安,我们迎来了清爽怡人的秋天;校园里没有了假期时的安静与沉寂,又处处充满了欢声笑语,开...
    雅慧圆满阅读 4,390评论 0 0
  • 常说道,常在河边走,总有湿鞋时。前年,一个朋友的手机在店里被偷了,三个月后,小偷被抓到,退了3600元赃款;昨天室...
    92新元阅读 1,898评论 0 0