我正在从数据库中获取用户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倍。因此,我该如何解决这个问题并使它仅对整个项目进行一次迭代?
我认为您缺少可用于分别调用每个项目的方法。为您的项目创建一个setter和getter。然后可以在循环中将其命名为list.get(position).getItem。
onBindViewHolder
被RecyvlerView
调用以在指定位置显示数据。由于所有数据都存储在List
中,因此它们的相应索引将与itemView
的位置相同。
在您的函数中,您正在为list
生成的每个itemView
遍历ViewHolder
中的所有项目。
您必须从代码中删除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
中获取数据。