在recyclerViews

时间:2016-05-25 14:44:13

标签: android android-recyclerview nestedrecyclerview

我已经创建了一个这样的嵌套RecyclerView(它是一个垂直的RecyclerView,其子视图的TextView用于节标题,水平RecyclerView用于项目列表)。

有些项目可以同时处于2个(或更多)水平RecyclerView,我希望保持主题同步(所以如果其中一个项目发生变化,其他项目也会知道)

我怎样才能做到这一点?

enter image description here

4 个答案:

答案 0 :(得分:1)

它更像是与数据结构相关的问题,而不是$(SolutionDir)libusb\MS32\dll\的问题。我建议您在水平列表中保留RecyclerView个正在填充的项目。

因此,当列表项被更改时(例如,项目被标记为收藏),只需将HashMap中的值从true更改为false,反之亦然。

然后在适配器上调用HashMap以反映水平列表中的更改。

希望有所帮助。

答案 1 :(得分:0)

我假设您从网络或某个数据库中获得List List个{s},并且不同水平列表上的相同项目会有id或{{{{{ 1}}。

您需要对用户交互执行的操作是,遍历所有水平列表中的所有项目,并检查它是否是已修改其值的同一项目,并在该点更新值。因此,就像在更改数据的每个水平列表上调用primary key一样简单。

答案 2 :(得分:0)

我还没有测试过这段代码及其类型的伪代码,也不确定它是否是一个很好的解决方案但是想尝试指出正确的方向。也许你找到了有用的东西。 忽略错误的命名..

创建一个所有嵌套的回收器视图实现的接口,用于实际滚动。

public interface ScrollListener {
        void update(int scrollOffset);
}

在嵌套的回收站视图中实现

public class NestedRecyclerViewFragment implements NestedScrollListener {

        RecyclerView mRecyclerView;

        @Override
        public onCreate(Bundle savedInstance) {
            mRecyclerView.addOnScrollListener { 
                public onScroll(int xOffset, int yOffset) {
                   if (getActivity() instanceof OnNestedRecyclerViewScrollListener) {
                        ((OnNestedRecyclerViewScrollListener) getActivity()).onNestedScroll(xOffset);
                    }
                }
            }
        }
        ....

        @Override
        protected void update(int scrollOffset) {
            mRecyclerView.scrollTo(scrollOffset, 0);
        }

        ....
}

然后你可能有另一个父实现的接口。

public interface OnNestedRecyclerViewScrollListener {
        void onNestedScroll(int scrollOffset);
}

具有嵌套的回收者视图。

public class ParentFragment implements OnNestedRecyclerViewScrollListener {

           Adapter nestedRecyclerViewAdapter;

            ....

            @Override
            protected void onNestedScroll(int scrollOffset) {
                for (int i = 0; i < nestedRecyclerViewAdapter.getItemCount(); i++) {
                    RecyclerView recyclerView = nestedRecyclerViewAdapter.getItemAt(i);
                    if (recyclerView instanceof NestedScrollListener) {
                        ((NestedScrollListener) recyclerView).update(scrollOffset);
                    }
                }
            }

            ....
    }

注意:可能一直在迭代适配器中的项目,但它可能会指向正确的方向

答案 3 :(得分:0)

如果您不想统一RecyclerViews数据模型,可以使用LocalBroadcastReceiver。 每个RecyclerView都应将自己设置为观察者,并在需要时通知一个RecyclerView中的任何更改,并在其他RecyclerViews中执行您想要的操作。