You need to enable JavaScript to run this app. 如何通过Intent传递FirebaseRecyclerOption/RecyclerView选中项到其他Activity?
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Intent传递FirebaseRecyclerOption/RecyclerView选中项到其他Activity?

问题根源
  • 列表点击事件获取狗狗名称的逻辑错误:findViewById(R.id.dogName)默认从Activity全局布局查找控件,只会返回列表第一个加载的狗狗名称控件的值,因此每次传递给DogProfile的名字都是固定的Finn。
  • ChooseDog点击事件中多余调用了仅属于DogProfile的getDogData()方法,无实际作用。
修复代码

修改ChooseDog列表点击逻辑

从点击的列表项视图v中查找名称控件,删除无效调用,代码如下:

ItemClickSupport.addTo(recyclerView).setOnItemClickListener(
        new ItemClickSupport.OnItemClickListener() {
            @Override
            public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                // 从当前点击的列表项视图中查找dogName控件
                TextView dogName = v.findViewById(R.id.dogName);
                Intent intent = new Intent(ChooseDog.this, DogProfile.class);
                intent.putExtra("name", dogName.getText().toString());
                startActivity(intent);
            }
        }
);

更稳妥的实现方式是直接从Adapter中取对应位置的Dog对象获取名称,避免控件显示内容和实际数据不一致的问题:

ItemClickSupport.addTo(recyclerView).setOnItemClickListener(
        new ItemClickSupport.OnItemClickListener() {
            @Override
            public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                Dog clickedDog = dogUserAdapter.getItem(position);
                Intent intent = new Intent(ChooseDog.this, DogProfile.class);
                intent.putExtra("name", clickedDog.getName());
                startActivity(intent);
            }
        }
);

优化DogProfile查询逻辑(可选)

你已通过orderByChild("name").equalTo(dogsName)做了数据过滤,返回结果必然是名称匹配的节点,无需再做二次相等判断,同时优化空值处理逻辑:

private void getDogData() {
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("user").child(uid).child("dogs");
    // 直接调用getStringExtra避免Extras为空时的空指针异常
    String dogsName = getIntent().getStringExtra("name");
    Query query = databaseReference.orderByChild("name").equalTo(dogsName);

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    String name = ds.child("name").getValue(String.class);
                    String dogBreed = ds.child("breed").getValue(String.class);
                    String dogAge = ds.child("age").getValue(String.class);
                    String gender = ds.child("gender").getValue(String.class);
                    String dogWeight = ds.child("weight").getValue(String.class);
                    String neutered = ds.child("neutered").getValue(String.class);

                    dogName.setText(name);
                    breed.setText(dogBreed);
                    age.setText(dogAge);
                    dogGender.setText(gender);
                    weight.setText(dogWeight);
                    isNeutered.setText(neutered);
                }
            } else {
                Toast.makeText(DogProfile.this, "未找到对应狗狗信息,请重试", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w("TAG", "onCancelled", databaseError.toException());
        }
    });
}

内容的提问来源于stack exchange,提问作者Caitlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 22:18:04