【问题标题】:I want to scroll multiple recyclerview at a time how to achieve that我想一次滚动多个recyclerview如何实现
【发布时间】:2017-02-22 01:39:52
【问题描述】:

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

【问题讨论】:

标签: android material-design android-recyclerview


【解决方案1】:

答案很简单,你必须从一个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 已准备好滚动。如果您滚动一个回收视图,它将滚动所有其他回收视图。

移动不是问题,停止是问题。如果用户抛出了一个列表,同时他停止了其他列表,该列表只会被停止,所以你也需要覆盖这种情况。我希望这个解释和代码能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多