【问题标题】:Scroll multiple recyclerviews on one recyclerview scroll在一个 recyclerview 滚动上滚动多个 recyclerview
【发布时间】:2015-04-23 00:02:04
【问题描述】:

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

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);
                    }
            }
        });

【问题讨论】:

    标签: android scroll android-recyclerview


    【解决方案1】:

    我已经和我的朋友一起解决了这个问题几个小时......最终的答案真的很简单。 主要思想是两个recyclerview应该使用相同的onscrollListener而不是不同的onscrollListener,这样这个监听器就可以得到哪个recyclerview正在滚动,避免堆栈溢出。请尝试关注

        //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);
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不这么认为。我正在尝试制作一个可以很好滚动的垂直列表的水平列表。
      【解决方案3】:

      从您的 cmets 看来,您似乎需要几个垂直的 RecycleViews,并希望水平滚动它们。

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

      否则你可以看看 HorzizontalScrollView,虽然这只对一小部分垂直列表有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 2015-09-03
        相关资源
        最近更新 更多