【问题标题】:Get RecyclerView child Views获取 RecyclerView 子视图
【发布时间】:2015-02-25 20:33:29
【问题描述】:

我正在尝试获取 RecyclerView 项目的所有视图,但似乎我只能获取第一个。我正在获取这样的视图:

LinearLayoutManager manager = (LinearLayoutManager) rv.getLayoutManager();
List<View> list = new ArrayList<View>();

for(int i = 0; i < manager.getItemCount(); i ++ ) {
  manager.scrollToPosition(i);

  View view = manager.findViewByPosition(i);

  if(view == null) {
    Log.i("Null Check", "Null: " + i);
  }

  list.add(view);
}

问题是我一直在 RecyclerView 中获取第一个视图。如果我有 10 个项目,将获取第一个项目,其他 9 个项目将记录为空。就像scrollToPosition(i) 工作不正常。

这是scrollToPosition(i)javadoc:

滚动 RecyclerView 以使位置可见。回收站视图 将滚动制作目标所需的最小数量 位置可见。如果您正在寻找类似的行为 android.widget.ListView.setSelection(int) 或 android.widget.ListView.setSelectionFromTop(int, int),使用 scrollToPositionWithOffset(int, int)。 注意滚动位置的变化 直到下一次布局调用才会反映。

因为最后一句话,我很担心。你觉得我该如何解决这个问题?

【问题讨论】:

  • 正如其他人也问的那样,您为什么要这样做?如果你想要所有视图,那么使用 RecyclerView 有什么意义呢?另外,是的,您没有获得新视图,因为 RecyclerView 在新的布局传递发生之前不会滚动到新位置。

标签: android android-recyclerview


【解决方案1】:

通过分配的RecyclerView.Adapter 而不是布局管理器检索 RecyclerView 子视图。布局管理器协助布局子视图(即测量和布局),但您应该咨询分配给管理 RecyclerView 数据而不是其布局管理器的 Adapter

【讨论】:

  • 谢谢,但是如何从适配器获取视图?
  • 你能解释一下你想用视图做什么吗? RecyclerView/ListViews 的目标是您提供数据集并通过 Adapter 将数据绑定到视图;您将覆盖 onBindViewHolder 来完成此操作。这个想法是让您只负责更新/管理数据集,同时让适配器处理排列视图。见Creating Lists and Cards。或者使用更多代码编辑您的帖子(包括您的适配器以及为什么需要视图列表)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
相关资源
最近更新 更多