Firebase Recycler适配器中的循环

问题描述 投票:1回答:2

我正在从数据库中获取用户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倍。因此,我该如何解决这个问题并使它仅对整个项目进行一次迭代?

android firebase for-loop recycler-adapter
2个回答
0
投票

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


0
投票

onBindViewHolderRecyvlerView调用以在指定位置显示数据。由于所有数据都存储在List中,因此它们的相应索引将与itemView的位置相同。

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

您必须从代码中删除for循环,只需将position用作index,即可从listindex相同的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中获取数据。

© www.soinside.com 2019 - 2024. All rights reserved.