【问题标题】:Loop in Firebase Recycler AdapterFirebase 回收器适配器中的循环
【发布时间】:2020-02-20 09:08:52
【问题描述】:

我正在从数据库中获取用户 ID 列表。并且它正确地获取了值。我正在使用FirebaseRecyclerAdapter,当我在onBindViewHolder 中迭代该列表时,循环将按照列表的大小运行。例如这里:

 adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
            @Override
            protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {
               for (int i = 0 ; i<list.size() ; i++){
                  Toast.makeText(List.this,"List :" +list.get(i), Toast.LENGTH_SHORT).show();
               }
            }
 }

在这里,我在列表中有 5 个项目,在迭代时我正在为每个项目敬酒。所以在这里循环运行 25 次,它按顺序显示每个项目 5 次。首先,它在显示最后一个项目后有序显示 5 个项目,它再次从第一个项目开始烘烤,并一直持续到列表大小的 5 次。 那么我该如何解决这个问题并让它只对整个项目进行一次迭代呢?

【问题讨论】:

  • 我认为你不应该迭代 list.size。相反,您可以使用位置作为索引直接获取数据。试试这个list.get(position)。另外,请将列表中的数据张贴作为参考。
  • 如果我做 list.get(position) 那么它将第一项烘烤五次然后第二项烘烤并继续最终它做同样的事情
  • 不不不!您必须完全删除循环,只需编写 Toast 行
  • 是的,那个工作的人,我为此奋斗了 2 天,您能否详细说明一下,如果我们应用循环,为什么会出现此问题?
  • 请查看我的回答以更好地了解您的问题

标签: android firebase for-loop android-recyclerview firebaseui


【解决方案1】:

onBindViewHolder被RecyvlerView调用,在指定位置显示数据。由于您拥有List 中的所有数据,因此它们对应的索引将与itemView 的位置相同。

在您的函数中,您正在为 ViewHolder 生成的每个 itemView 迭代 list 中的所有项目。

您必须从您的代码中删除for 循环并简单地使用position 作为index 从您的list 检索数据,其index 与position 相同。

试试这个代码:

adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
            @Override
            protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {

                  Toast.makeText(List.this,"List :" +list.get(position), Toast.LENGTH_SHORT).show();

            }
 }

对于这种方法,每次生成itemView时,都会在position处,以此为索引,您可以轻松地从list获取数据。

对于您的场景,由于您已经在每个 itemView 中生成在 onBindViewHolder 中,然后您正在迭代 list 中的每个元素,因此每个项目的显示次数完全相同,作为list的大小。

【讨论】:

    【解决方案2】:

    我认为您缺少一种可用于单独调用每个项目的方法。 为您的项目创建一个 setter 和 getter。然后在您的循环中,您可以将其称为 list.get(position).getItem 。

    【讨论】:

    • 你可以简单地通过 list.get(position) 做到这一点,那么为什么要额外的方法
    • 我的意思是你需要为你的回收适配器创建一个 setter 和 getter 类。因此,当您尝试检索某个数据时,您可以单独调用它。
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多