我已经创建了一个这样的嵌套RecyclerView
(它是一个垂直的RecyclerView
,其子视图的TextView
用于节标题,水平RecyclerView
用于项目列表)。
有些项目可以同时处于2个(或更多)水平RecyclerView
,我希望保持主题同步(所以如果其中一个项目发生变化,其他项目也会知道)
我怎样才能做到这一点?
答案 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中执行您想要的操作。