曾经被困扰过的双向互滚动的问题,赫然发现当时真是蠢!
有时会碰到布局里两三个列表数据相互关联,需要互相关联滚动(具体实现处理方式不同,实现方式也就不同
).
例如课程表,将课程表上方的周几看做一个列表,下方的每天的对应数据看做一个列表,自然要求上下列表跟随滚动,如下图
上方的日期和下面的时间就是两个单独的列表.
单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;
}
});