Firebase回收器适配器中的环路



我正在从数据库中获取用户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次。那么,我该如何满足这一点,并使其只对整个项目进行一次迭代呢?

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

在您的函数中,对于ViewHolder正在生成的每个itemView,您正在对list中的所有项进行迭代。

您必须从代码中删除for循环,并简单地使用position作为indexlist检索数据,indexposition相同。

试试这个代码:

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.

相关内容

  • 没有找到相关文章

最新更新