如何让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
相关产品推荐
相关产品推荐

