在 Firebase Recycler 适配器中循环

Loop in Firebase Recycler Adapter

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

 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 次。 那么我该如何迎合它并让它只迭代整个项目一次呢?

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

onBindViewHolderRecyvlerView调用,显示指定位置的数据。因为你在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中获取数据.

对于您的场景,由于您已经在 onBindViewHolder 中生成的每个 itemView 中,然后您正在迭代 list 中的每个元素,因此每个项目都是显示的次数与 list.

的大小完全相同