ErQi

RecyclerView互相关联滚动

曾经被困扰过的双向互滚动的问题,赫然发现当时真是蠢!

有时会碰到布局里两三个列表数据相互关联,需要互相关联滚动(具体实现处理方式不同,实现方式也就不同).
例如课程表,将课程表上方的周几看做一个列表,下方的每天的对应数据看做一个列表,自然要求上下列表跟随滚动,如下图
课程表示例
上方的日期和下面的时间就是两个单独的列表.
单RecyclerView的监听很简单,直接在OnScrollListener回调方法里面调用另一个RecyclerView的scrollBy方法即可.
多RecyclerView直接调用就不行了,因为RecyclerView的scrollBy方法会触发OnScrollListener的回调,这样就陷入了相互回调地狱.
解决示例:

mView2.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        mScroll1 = true;
        if (!mScroll2) {
            mView1.scrollBy(dx, dy);
        }
        mScroll1 = false;
    }
});

mView1.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        mScroll2 = true;
        if (!mScroll1) {
            mView2.scrollBy(dx, dy);
        }
        mScroll2 = false;
    }
});

当初都没想到…可见我曾经智力多低