FirebaseRecyclerviewAdapter 中的 recyclerview 转了很长时间,但只写了一个
recyclerview in FirebaseRecyclerviewAdapter turn all longth but write just one
我在 FRA 中有一个常规的 RecyclerView,我在 onbindviewholder class 中设置了它。正如您在应用程序中看到的那样,转长有一个 space 用于所有项目,通常我应该在那里看到回复文本,但只有一个人可以看到。
dbreply.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds:snapshot.getChildren()) {
for (DataSnapshot snapshot1:ds.getChildren()) {
reply data = snapshot1.getValue(reply.class);
list.add(data);
holder.rcv.setLayoutManager(new LinearLayoutManager(getContext()));
myAdapter = new MyAdapter(getContext(), list);
holder.rcv.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) { }});
您之所以会出现这种行为,是因为在内循环的每次迭代中都创建了 MyAdapter 的新实例。您应该将所有这 4 行代码从循环中取出,如下所示:
for (DataSnapshot ds:snapshot.getChildren()) {
for (DataSnapshot snapshot1:ds.getChildren()) {
reply data = snapshot1.getValue(reply.class);
list.add(data);
}
holder.rcv.setLayoutManager(new LinearLayoutManager(getContext()));
myAdapter = new MyAdapter(getContext(), list);
holder.rcv.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
}
我在 FRA 中有一个常规的 RecyclerView,我在 onbindviewholder class 中设置了它。正如您在应用程序中看到的那样,转长有一个 space 用于所有项目,通常我应该在那里看到回复文本,但只有一个人可以看到。
dbreply.child(post_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds:snapshot.getChildren()) {
for (DataSnapshot snapshot1:ds.getChildren()) {
reply data = snapshot1.getValue(reply.class);
list.add(data);
holder.rcv.setLayoutManager(new LinearLayoutManager(getContext()));
myAdapter = new MyAdapter(getContext(), list);
holder.rcv.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) { }});
您之所以会出现这种行为,是因为在内循环的每次迭代中都创建了 MyAdapter 的新实例。您应该将所有这 4 行代码从循环中取出,如下所示:
for (DataSnapshot ds:snapshot.getChildren()) {
for (DataSnapshot snapshot1:ds.getChildren()) {
reply data = snapshot1.getValue(reply.class);
list.add(data);
}
holder.rcv.setLayoutManager(new LinearLayoutManager(getContext()));
myAdapter = new MyAdapter(getContext(), list);
holder.rcv.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
}