我正在从数据库中获取用户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次。那么,我该如何满足这一点,并使其只对整个项目进行一次迭代呢?
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
的大小完全相同。
我认为您缺少了一个可以用于单独调用每个项的方法。为您的项目创建一个setter和getter。在你的循环中,你可以称之为list.get(position(.getItem.