是否可以将Firebase Recycler视图放入另一个Firebase Recycler视图中?
我正在制作一个在线购物应用,并试图在另一个回收站视图中填充一个回收站视图。
这是我的数据库结构:
users
--uid
--order
--1
---status:0
---total:$100
---item
--1
--item_id:AAA
--quantity:4
--2
--item_id:BBB
--quantity:2
--2
---status:1
---total:$30
---item
--1
--item_id:AAA
--quantity:1
--2
--item_id:CCC
--quantity:2
问题是,当我尝试在应用程序上显示订单的“历史记录”时,我只能显示订单的详细信息,例如 item_id 和 quantity < / strong>。 但是该物品的回收者视图为空
这是我的Java代码
OnCreate:
mDatabaseOrder = FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("order");
mDatabaseOrder.keepSynced(true);
mOrderList = (RecyclerView) findViewById(R.id.order_list);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
mOrderList.setHasFixedSize(true);
mOrderList.setLayoutManager(new LinearLayoutManager(this));
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View orderview = inflater.inflate(R.layout.order_row, null);
mOrderItemList = (RecyclerView) orderview.findViewById(R.id.orderitem_list);
mOrderItemList.setHasFixedSize(true);
mOrderItemList.setLayoutManager(new LinearLayoutManager(orderview.getContext()));
OnStart:
FirebaseRecyclerAdapter<Order, OrderViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Order, OrderViewHolder>(
Order.class,
R.layout.order_row,
OrderViewHolder.class,
mDatabaseOrder
)
{
@Override
protected void populateViewHolder(final OrderViewHolder viewHolder, Order model, int position) {
final String order_number = getRef(position).getKey();
viewHolder.setStatus(model.getStatus());
viewHolder.setTotal(model.getTotal());
viewHolder.setDeliveryMethod(model.getDelivery_method());
mDatabaseOrderItem = FirebaseDatabase.getInstance().getReference().child("users").child(uid).child("order").child(order_number).child("item");
mDatabaseOrderItem.keepSynced(true);
//set item inside eacn order
FirebaseRecyclerAdapter<ShoppingCart, OrderItemViewHolder> itemfirebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ShoppingCart, OrderItemViewHolder>(
ShoppingCart.class,
R.layout.orderitem_row,
OrderItemViewHolder.class,
mDatabaseOrderItem
)
{
@Override
protected void populateViewHolder(final OrderItemViewHolder viewHolder, ShoppingCart model, int position) {
//final String post_key = getRef(position).getKey();
final String item_id = model.getItemid();
viewHolder.setItemName(item_id);
viewHolder.setItemPrice(item_id);
viewHolder.setQuantity(item_id);
}
};
mOrderItemList.setAdapter(itemfirebaseRecyclerAdapter);
}
};
mOrderList.setAdapter(firebaseRecyclerAdapter);
每个订单内的订单和商品的ViewHolder:
public static class OrderViewHolder extends RecyclerView.ViewHolder{
public OrderViewHolder(View OrderView) {
super(OrderView);
mView = OrderView;
}
public void setDeliveryMethod(String deliveryMethod){
TextView order_deli = (TextView) mView.findViewById(R.id.deliverymethod);
order_deli.setText(deliveryMethod);
}
public void setStatus (String status){
TextView order_status = (TextView) mView.findViewById(R.id.status);
order_status.setText(status);
}
public void setTotal(String total){
TextView order_total = (TextView) mView.findViewById(R.id.total);
String pricetext = "$" + total ;
order_total.setText(pricetext);
}
}
public static class OrderItemViewHolder extends RecyclerView.ViewHolder{
public OrderItemViewHolder(View orderitemView) {
super(orderitemView);
mView = orderitemView;
mAuth = FirebaseAuth.getInstance();
}
public void setQuantity (String quantity){
TextView item_qty = (TextView) mView.findViewById(R.id.qty);
item_qty.setText(quantity);
}
public void setItemName(String itemid){
FirebaseDatabase.getInstance().getReference().child("Item").child(itemid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
TextView item_name = (TextView) mView.findViewById(R.id.name);
item_name.setText((String) dataSnapshot.child("name").getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public void setItemPrice(String itemid){
FirebaseDatabase.getInstance().getReference().child("Item").child(itemid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
TextView item_price = (TextView) mView.findViewById(R.id.price);
String text = "$"+(String) dataSnapshot.child("price").getValue();
item_price.setText(text);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}