在一个Recyclerview滚动上滚动多个recyclerviews

时间:2015-04-23 00:02:05

标签: android scroll android-recyclerview

我在另一个arraylist中有一个recyclerveiws recyclerview,并想知道滚动滚动时如何滚动所有这些内容。 这是我到目前为止,但它给了我一个堆栈溢出错误:

holder.rv.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                if (dx != -199382734)
                    for (sched_vh vh : vhs) {
                        if (vh != holder)
                            vh.rv.scrollBy(-199382734, dy);
                    }
            }
        });

3 个答案:

答案 0 :(得分:3)

我和朋友一起解决了这个问题几个小时......最后的答案很简单。 主要的想法是两个recyclerview应该使用相同的onscrollListener而不是不同的,这样这个监听器可以获得哪个recyclelerview滚动,并避免堆栈溢出。请尝试以下

    //rcv and leftrcv are two recyclerviews
    RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (recyclerView == leftrcv) {
                rcv.removeOnScrollListener(this);
                rcv.scrollBy(0, dy);
                rcv.addOnScrollListener(this);
            } else if (recyclerView == rcv) {
                leftrcv.removeOnScrollListener(this);
                leftrcv.scrollBy(0, dy);
                leftrcv.addOnScrollListener(this);
            }
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
        }
    };

    leftrcv.addOnScrollListener(scrollListener);
    rcv.addOnScrollListener(scrollListener);

但我不知道这是否会导致性能问题...

答案 1 :(得分:0)

您的实施可能是错误的。您应该有一个RecyclerView具有不同的视图类型。

答案 2 :(得分:0)

从您的评论中,您似乎需要几个垂直的RecycleViews,并希望水平滚动它们。

如果您希望每个垂直列表都填满屏幕,您可以使用ViewPager,它允许您在视图(或片段)列表中水平滑动。

否则你可以看一下HorzizontalScrollView,虽然这只适用于一小组垂直列表。