如何在点击RecyclerView中条目时获取Firebase对应节点的ID

你现在的代码已经拿到了对应用户的Posts父节点引用,要获取点击的CardView对应子节点,按以下步骤实现即可:
- 给你的Post数据实体类新增一个
String类型的key字段,用来存储每个子节点的唯一key - 从Firebase拉取列表数据时,把每个子节点的key存入对应Post实体的key字段
- 在列表Adapter的绑定逻辑中给CardView设置点击事件,点击时取出对应实体的key,拼接父引用即可得到目标节点的引用
代码示例
你现有父节点引用无需修改:
reference = FirebaseDatabase.getInstance().getReference("Posts") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()); String str = reference.getKey();
列表数据拉取逻辑:
reference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { postList.clear(); for (DataSnapshot childSnapshot : snapshot.getChildren()) { Post post = childSnapshot.getValue(Post.class); // 存储当前子节点的唯一标识key post.setKey(childSnapshot.getKey()); postList.add(post); } postAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError error) { // 按需添加异常处理逻辑 } });
Adapter内点击事件绑定逻辑:
@Override protected void onBindViewHolder(@NonNull PostViewHolder holder, int position, @NonNull Post currentPost) { // 原有列表项内容赋值逻辑保持不变 // 绑定CardView点击事件 holder.cardView.setOnClickListener(v -> { // 直接获取点击项对应的节点引用 DatabaseReference targetNodeRef = reference.child(currentPost.getKey()); // 后续可对targetNodeRef执行增删改查等任意操作 }); }
内容的提问来源于stack exchange,提问作者Hager Khaled
相关产品推荐
相关产品推荐

