在 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 .
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
中获取数据.
对于您的场景,由于您已经在 onBindViewHolder
中生成的每个 itemView
中,然后您正在迭代 list
中的每个元素,因此每个项目都是显示的次数与 list
.
的大小完全相同
我正在从数据库中获取用户 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 .
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
中获取数据.
对于您的场景,由于您已经在 onBindViewHolder
中生成的每个 itemView
中,然后您正在迭代 list
中的每个元素,因此每个项目都是显示的次数与 list
.