在适配器

时间:2017-06-13 14:32:44

标签: android android-recyclerview synchronization horizontal-scrolling

我想在垂直 RecyclerView 中实现水平 RecyclerView

最终结果应该是这样的:

enter image description here

因此,对于垂直 RecyclerView 中的每个元素,我需要另一个水平方式。有点像学校的日程安排,左边是Day,右边有实际的日程,可以横向滚动。

我设法通过在第一个 RecyclerView 项目中放置 RecyclerView 来实现这一目标。一切都很完美,但所有水平 RecyclerView 都是单独滚动的。我想要做的是让所有水平的 RecyclerView 同时进行同步和滚动。我怎样才能做到这一点?

我在垂直适配器的 onBindViewHolder 方法中设置适配器和水平 RecyclerView 的方式是:

scheduleAdapter = new ScheduleAdapter(context, data);
holder.scheduleRecyclerView.setAdapter(scheduleAdapter);
holder.scheduleRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));

2 个答案:

答案 0 :(得分:3)

每个recyclerview都应添加以下scroll listener

m_jParentRecyclerViewLayoutManager是父项RecyclerView,其项目具有recyclerview。

RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener {

    @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);

            scrollAllRecyclerView(recyclerView, dx, dy);
        }

        private void scrollAllRecyclerView(RecyclerView recyclerView, int dx, int dy) {

                // Scroll children RecyclerViews except the recyclerView that is listened.
                for (int i = 0; i < m_jParentRecyclerViewLayoutManager.getChildCount(); i++) {
                    RecyclerView child = (RecyclerView) m_jParentRecyclerViewLayoutManager.getChildAt(i);
                    if (child != recyclerView) {
                        scroll(child, dx, dy);
                    }
                }
            }
        }

        private void scroll(RecyclerView recyclerView, int dx, int dy) {
            recyclerView.removeOnScrollListener(this);
            recyclerView.scrollBy(dx, dy);
            recyclerView.addOnScrollListener(this);
        }

编辑:在您的父级Recyclerview适配器中。

 @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            RecyclerView recyclerView = new RecyclerView(mContext);
            .. set layout manager & your adapter .

            if (scrollListener != null) {
                recyclerView.removeOnScrollListener(scrollListener );
                recyclerView.addOnScrollListener(scrollListener );
            }
            return new RecyclerViewViewHolder(recyclerView);
        }

编辑2 :有Table View library滚动所有子回收视图同步。 您可以查看源代码

答案 1 :(得分:-1)

在您的情况下,最好使用水平GridLayoutManager

在这种情况下,无需同步多个RecyclerView的滚动。

相关问题