RecyclerView 、ViewPager 左右滑动冲突

栏目: IOS · Android · 发布时间: 7年前

内容简介:最近项目首页是ViewPager+Fragment实现左右滑动切换,并且其中有轮播图,目前轮播图是用RecyclerView来实现。本来是一切正常,后来增加一个需求,需要轮播图可以无限滑动。首先就想到在RecyclerView.Adapter#getItemCount()方法返回Integer.MAX_VALUE,然后在稍微修改下List.get(int index)取值逻辑,最后页面打开让RecyclerView滚动到中间来实现。

最近项目首页是ViewPager+Fragment实现左右滑动切换,并且其中有轮播图,目前轮播图是用RecyclerView来实现。

本来是一切正常,后来增加一个需求,需要轮播图可以无限滑动。

首先就想到在RecyclerView.Adapter#getItemCount()方法返回Integer.MAX_VALUE,然后在稍微修改下List.get(int index)取值逻辑,最后页面打开让RecyclerView滚动到中间来实现。

问题

在RecyclerView.Adapter#getItemCount()返回真正的List.size()数量的时候一切正常,RecyclerView 、ViewPager两个相安无事,非常和谐。但是当RecyclerView.Adapter#getItemCount()返回Integer.MAX_VALUE,就会导致RecyclerView左右滑动和ViewPager的左右滑动冲突。

解决

目前测试出两个解决方案:

1. 更改返回值

RecyclerView.Adapter#getItemCount()不要返回Integer.MAX_VALUE,改为返回3000000(这个数值可自行测试得出)或者其他数值。

测试机有限,目前测试返回390W+的时候都可以正常滑动,一旦返回大于等于400W就会开始冲突。

具体原因未知。

这样可以不需要自定义RecyclerView

2. 自定义RecyclerView

public class SlidingConflictRecyclerView extends RecyclerView {

    public SlidingConflictRecyclerView(@NonNull Context context) {
        super(context);
    }

    public SlidingConflictRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public SlidingConflictRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        boolean canScrollHorizontally = canScrollHorizontally(-1) || canScrollHorizontally(1);
        boolean canScrollVertically = canScrollVertically(-1) || canScrollVertically(1);
        if (canScrollHorizontally || canScrollVertically) {
            ViewParent parent = getParent();
            if (parent != null) {
                parent.requestDisallowInterceptTouchEvent(true);
            }
        }
        return super.dispatchTouchEvent(event);
    }

}
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图灵的秘密

图灵的秘密

Charles Petzold / 杨卫东 / 人民邮电出版社 / 2012-11 / 69.00元

图灵机是英国数学家阿兰•图灵提出的一种抽象计算模型,本书深入剖析了图灵这篇描述图灵机和可计算性的原始论文《论可计算数及其在判定性问题上的应用》。书中在详解论文的同时,也附带了大量的历史背景资料、图灵的个人经历,以及图灵机对于人们理解计算机、人类意识和宇宙所产生的影响。 本书适合所有计算机科学专业的学生、程序员或其他技术人员,同时也适合欲了解图灵生平及其构建图灵机的思维的读者阅读。一起来看看 《图灵的秘密》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试