作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 Firebase 数据库,如下所示:
我想将所有这些名称显示到 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/
我是一名优秀的程序员,十分优秀!