You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让RecyclerView子项可点击跳转Activity并加载对应Firebase数据

解决方案

第一步:修改跳转逻辑,传递子项唯一标识

你当前的点击回调已经可以拿到对应子项的RestaurantsModel实例,直接把实例中的唯一标识通过Intent传给目标Activity即可,你已经给每个Model存了Firebase节点的Key,这个是最适合用来查询对应数据的唯一标识:
首先修改PizzaActivity中的点击回调和跳转方法:

@Override
public void onItemClick(RestaurantsModel restaurantsModel ){
    // 把点击子项的标识传给跳转方法
    showCatalog(restaurantsModel.getKey(), restaurantsModel.getName());
}

// 改造showCatalog方法接收参数
private void showCatalog(String restaurantKey, String restaurantName) {
    Intent intent = new Intent(this, PizzaCatalogActivity.class);
    // 将参数存入Intent传递到下一页
    intent.putExtra("RESTAURANT_KEY", restaurantKey);
    intent.putExtra("RESTAURANT_NAME", restaurantName);
    startActivity(intent);
}

第二步:在目标Activity接收参数,查询对应Firebase数据

在PizzaCatalogActivity的onCreate生命周期中先接收传过来的参数,再用这个唯一Key去Firebase拉取对应餐厅的专属数据即可:

private String mRestaurantKey;
private String mRestaurantName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pizza_catalog);
    
    // 接收上一页传递的参数
    if (getIntent() != null) {
        mRestaurantKey = getIntent().getStringExtra("RESTAURANT_KEY");
        mRestaurantName = getIntent().getStringExtra("RESTAURANT_NAME");
        // 可选:将餐厅名设置为页面标题
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(mRestaurantName);
        }
    }
    
    // 用拿到的唯一Key查询对应餐厅的目录数据,路径可根据你实际的Firebase结构调整
    loadRestaurantCatalog();
}

private void loadRestaurantCatalog() {
    FirebaseDatabase.getInstance()
            .getReference("RestaurantCatalog") // 替换为你实际存储餐厅详情的节点名
            .child(mRestaurantKey)
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    // 解析快照数据后渲染到当前页面即可
                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                    // 处理查询报错逻辑
                }
            });
}

可选优化:直接传递整个Model对象

如果你的RestaurantsModel已经实现了Parcelable(更推荐)或者Serializable接口,可以直接把整个对象传递到下一页,不需要拆分传递单个参数:

// 跳转时存入整个Model
intent.putExtra("RESTAURANT_MODEL", restaurantsModel);

// 目标页接收整个Model
RestaurantsModel receivedModel = getIntent().getParcelableExtra("RESTAURANT_MODEL");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:07