gpt4 book ai didi

android - 如何在 Android 的 RecyclerView 中显示来自 Firebase 节点的所有子节点?

转载 作者:行者123 更新时间:2023-11-29 19:24:27 25 4
gpt4 key购买 nike

我有一个简单的 Firebase 数据库,如下所示:

enter image description here

我想将所有这些名称显示到 RecyclerView 中.这是我来自 onCreate 的代码方法:

databaseReference = FirebaseDatabase.getInstance().getReference().child("Names");
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new RoomFirebaseAdapter(databaseReference, this);
recyclerView.setAdapter(adapter);

我还创建了一个 CustomFirebaseAdapter哪个extends RecyclerView.Adapter<CustomFirebaseAdapter.ViewHolder> .这是我的 onBindViewHolder方法:

@Override
public void onBindViewHolder(final RoomFirebaseAdapter.ViewHolder holder, int position) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
name = ds.getKey();
holder.textView.setText(name);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});
}

问题是,在我的 RecyclerView 中仅显示最后一项。我如何显示 RecyclerView 中的所有项目? ?

提前致谢!

最佳答案

您必须从 onBindViewHolder 中提取 addValueEventListener,并且在此方法中仅设置 holder。最终您还可以使用 ChildEventListener 例如:

private ArrayList<String> names;

public CustomFirebaseAdapter() {
names = new ArrayList<String>();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Names");
updateNames();
}

private void updateNames() {
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
final String name = dataSnapshot.getValue(String.class);
names.add(name);
notifyItemInserted(getItemCount() - 1);
}
...
};
databaseReference.addChildEventListener(childEventListener);
}

@Override
public void onBindViewHolder(final TodoViewHolder holder, int position) {
final String name = names.get(position);
if (name == null) { return; }

holder.textView.setText(name);
}

我遇到了同样的问题并通过这种方式解决了:example

经过一些调试我们发现,问题是项目布局在更改为 wrap_content 后占用了父级 match_parent 的整个空间,一切正常。

关于android - 如何在 Android 的 RecyclerView 中显示来自 Firebase 节点的所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41694367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com