RecyclerView 、ViewPager 左右滑动冲突

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

内容简介:最近项目首页是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);
    }

}
复制代码

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

查看所有标签

猜你喜欢:

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

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换