【问题标题】:Android Firebase pass data recyclerview to recyclerviewAndroid Firebase 将数据 recyclerview 传递给 recyclerview
【发布时间】:2022-01-18 03:47:11
【问题描述】:

我想将数据 RC_1 传递给 RC_2。我该怎么做(cat, info, orderid) RecyclerView 到 RecyclerView?Examp.pic_1

我的 firebase 节点就像图片一样。 My firebase node

//RC_1结构

 public class Name_Struct {
        private String name;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    }

//RC_2结构

public class Detail_Struct {
    private String cat;
    private String info;
    private String orderid;

public String getCat() {
    return cat;
}
public void setCat(String cat) {
    this.cat = cat;
}
public String getInfo() {
    return info;
}
public void setInfo(String info) {
    this.info = info;
}
public String getOrderid() {
    return orderid;
}
public void setOrderid(String orderid) {
    this.orderid = orderid;
}

RC_1 用于; //Myactivity_1

private void rc_1_get_name(){
    Query query = FirebaseDatabase.getInstance().getReference()
            .child(“Pro_”);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            mName.clear();
            for(DataSnapshot snp : snapshot.getChildren()){
                Name_Struct names = snp.getValue(Name_Struct.class);
                for (DataSnapshot recipeSnapshot: snp.child(“basket”).getChildren()) {
                    mName.add(names);
                }
            }
            mName_adapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    });
}

RC_1 用于; //Myadapter_1

@覆盖 public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {

    final Name_Struct names = mName.get(position);
    holder.name_.setText(names.getName()));

holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
Intent intent = new Intent(mContext, RC_2.class);

???

mContext.startActivity(intent);

}

}

【问题讨论】:

  • 究竟想传递给第二个活动什么?
  • 我要传递 Mike(name) 的数据 id_1 和 id_2(cat,info,orderid)。

标签: java android firebase firebase-realtime-database google-cloud-platform


【解决方案1】:

正如我在您的屏幕截图中看到的,“Pro_”节点包含一个名称,其值为“Mike”。这意味着您可以将该节点映射到Name_Struct 类型的对象中。你正在成功地做到这一点。然而,在同一节点下,还有另一个称为“篮子”的节点。该节点由 Map 对象表示,其中键由这些 ID(ID_1、ID_2 等)表示,值由 Detail_Struct 对象表示。为了能够映射“篮子”节点下的数据,您必须在 Name_Struct 类中添加一个名为 basket 的新属性,如下所示:

public class Name_Struct implements Serializable {
   private String name;
   private Map<String, Object> basket;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   @PropertyName("Basket")
   public Map<String, Object> getBasket() {
       return basket;
   }

   public void setBasket(Map<String, Object> basket) {
       this.basket = basket;
   }
}

现在要将数据传递给第二个 Activity,您必须添加迭代 Map 并创建一个 List&lt;Detail_Struct&gt;,可以将其添加到 Intent 以便在第二个 Activity 中读取。

【讨论】:

  • 非常感谢您的回复。我在观察数据。当我想在第二个活动中读取数据时,我收到错误“java.util.HashMap 无法转换为 java.util.List”。我该如何解决? //第一个 actv.(Send) intent.putExtra("basket", (Serializable) names.getBasket()) //第二个 actv.(Retrieve) List thumbs= (List)getIntent().getSerializableExtra ("basket") //错误行
  • 您不能将地图投射到列表中。如前所述,您必须遍历地图,以获取所需的数据,并将该数据添加到 List。然后可以将此列表添加到适配器,以便在 RecyclerView 中显示。
  • 在第二个活动中,我观察了数据。 Named_Struct 篮子=(Named_Struct)bundle.getSerializable("basket"); Log.d(篮子);如何将观察到的数据添加到第二个活动 (List) 中的适配器。 mDetail_Struct.add(products.getBasket());//错误行
  • 正如我已经说过的,iterate the Map,并将所需的数据放入 List。将该列表传递给适配器,就是这样。
  • 感谢您的帮助和耐心,Alex。这绝对是有帮助的。我想我将不得不打开一个新主题,因为我在执行最后一步(迭代地图)时遇到了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2021-05-12
相关资源
最近更新 更多