我想一次滚动多个recyclerview如何实现

时间:2016-10-13 04:37:04

标签: android android-recyclerview material-design recycler-adapter

我想一次滚动多个RecyclerView如何实现Exp-I在水平方向上有RecyclerView,当我滚动第一个RecyclerView时,第二个和第三个也滚动如何这样做?

1 个答案:

答案 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已准备好滚动。如果滚动一个循环视图,它将滚动所有其他回收视图。

移动不是问题,停止是。如果用户对列表进行了捏造,同时如果他停止了其他列表,则该列表将仅停止,因此您也需要覆盖该案例。我希望这个解释和代码能解决你的问题。