Поместите FirebaseRecyclerAdapter в другой FirebaseRecyclerAdapter - PullRequest
0 голосов
/ 18 сентября 2018

Можно ли поместить представление рециркулятора Firebase в другое представление рециркулятора FireBase?

Я создаю приложение для покупок в Интернете и пытаюсь заполнить представление Racheler внутри другого представления рециркулятора.

Здесьмоя структура базы данных:

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 и количество .Но представление переработчика для элемента пусто

Вот мой код 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) {

            }
        });


    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...