如何使用FirebaseRecyclerOptions获取用户唯一ID及子节点并展示到RecyclerView
实现方案
1. 调整ClassData实体类
在你的ClassData实体类中新增一个String类型的nodeId字段,用来存储节点唯一ID,这个字段不需要做Firebase序列化映射,后续手动赋值即可:
public class ClassData { // 保留原有所有字段(比如班级名称、教师信息等) private String nodeId; // 保留原有所有getter、setter方法,新增nodeId的读写方法 public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } }
2. 适配器内获取唯一ID
你现有的FirebaseRecyclerOptions查询配置不需要修改,只要在subjectAdapterStudent的onBindViewHolder方法中,通过适配器内置方法获取节点ID赋值给实体类即可:
@Override protected void onBindViewHolder(@NonNull YourViewHolder holder, int position, @NonNull ClassData model) { // 获取当前条目对应节点的唯一ID String uniqueId = getRef(position).getKey(); // 把ID存入实体类 model.setNodeId(uniqueId); // 后续正常绑定数据到视图即可,需要用ID的地方直接调用model.getNodeId()取值 holder.className.setText(model.getClassName()); holder.uniqueId.setText(model.getNodeId()); }
3. 原有初始化逻辑保持不变
你写的RecyclerView初始化代码不需要调整,注意要在页面的onStart生命周期调用适配器的startListening()方法开启数据监听,onStop生命周期调用stopListening()销毁监听即可:
FirebaseRecyclerOptions<ClassData> options = new FirebaseRecyclerOptions.Builder<ClassData>() .setQuery(FirebaseDatabase.getInstance().getReference().child("Class"), ClassData.class) .build(); recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); adapter = new subjectAdapterStudent(options); recyclerView.setAdapter(adapter);
内容的提问来源于stack exchange,提问作者Manny Doers
相关产品推荐
相关产品推荐

