我想一次滚动多个RecyclerView
如何实现Exp-I在水平方向上有RecyclerView
,当我滚动第一个RecyclerView
时,第二个和第三个也滚动如何这样做?
答案 0 :(得分:2)
答案非常简单,您必须从一个循环视图获取滚动反馈并将其传递给其他循环视图。但非常小心。
你需要保持哪个Recyclerview开始提供滚动反馈,以便它不会进入连续循环。
所以创建一个全局变量
private int draggingView = -1;
将scrollListener添加到您的所有recyclerviews
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已准备好滚动。如果滚动一个循环视图,它将滚动所有其他回收视图。
移动不是问题,停止是。如果用户对列表进行了捏造,同时如果他停止了其他列表,则该列表将仅停止,因此您也需要覆盖该案例。我希望这个解释和代码能解决你的问题。