答案很简单,你必须从一个recycleview 中获取滚动反馈,然后传递给其他recycleview。但非常小心。
你需要保持参考哪个recyclerview开始提供滚动反馈,这样它就不会进入连续循环。
所以创建一个全局变量
private int draggingView = -1;
将 scrollListener 添加到所有回收站视图
mRecyclerView1.addOnScrollListener(scrollListener);
mRecyclerView2.addOnScrollListener(scrollListener);
mRecyclerView3.addOnScrollListener(scrollListener);
你的滚动监听器应该在这个结构中。它应该决定哪个 recyclerview 提供滚动输入,哪个接收。
private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (mRecyclerView1 == recyclerView && newState == RecyclerView.SCROLL_STATE_DRAGGING) {
draggingView = 1;
} else if (mRecyclerView2 == recyclerView && newState == RecyclerView.SCROLL_STATE_DRAGGING) {
draggingView = 2;
} else if (mRecyclerView3 == recyclerView && newState == RecyclerView.SCROLL_STATE_DRAGGING) {
draggingView = 3;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (draggingView == 1 && recyclerView == mRecyclerView1) {
mRecyclerView2.scrollBy(dx, dy);
} else if (draggingView == 2 && recyclerView == mRecyclerView2) {
mRecyclerView1.scrollBy(dx, dy);
} else if (draggingView == 3 && recyclerView == mRecyclerView3) {
mRecyclerView1.scrollBy(dx, dy);
}
}
};
就是这样,您的 recyclerview 已准备好滚动。如果您滚动一个回收视图,它将滚动所有其他回收视图。
移动不是问题,停止是问题。如果用户抛出了一个列表,同时他停止了其他列表,该列表只会被停止,所以你也需要覆盖这种情况。我希望这个解释和代码能解决你的问题。