通过详细信息查看订单

时间:2019-08-20 07:42:33

标签: android

我正在制作像App这样的Sweet订单,我想根据Places(0),Shipped(1),OnTheWay(2),Delivered(3)等订单状态对订单进行排序。如果订单状态为3(已交付),我需要在 recyclerview 的底部显示该订单,目前我正在使用堆栈格式查看订单,可以吗?

private void loadOrders(final String phone) {

        adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(
                Request.class,
                R.layout.order_layout,
                OrderViewHolder.class,
                requests.orderByChild("phone").equalTo(phone)
        ) {
            @Override
            protected void populateViewHolder(OrderViewHolder orderViewHolder, final Request request, final int i) {

                final String OrderId, OrderPhone, OrderTotal, OrderAddress, OrderComment, OrderUserName, OrderTime, OrderDate;

                OrderId = adapter.getRef(i).getKey();
                OrderPhone = request.getPhone();
                OrderStatus = Common.convertCodeToStatus(request.getStatus());
                OrderTotal = request.getTotal();
                OrderAddress = request.getAddress();
                OrderComment = request.getComment();
                OrderUserName = request.getName();
                OrderTime = request.getTime();
                OrderDate = request.getDate();

                if (request.getStatus().equals("3")){

                    orderViewHolder.orderStatusImage.setImageResource(R.mipmap.cupcake);
                    orderViewHolder.orderStatusImage.setScaleType(ImageView.ScaleType.CENTER_CROP);

                    orderViewHolder.txtOrderStatus.setVisibility(View.GONE);
                    orderViewHolder.txtOrderDate.setVisibility(View.GONE);
                    orderViewHolder.txtOrderTime.setVisibility(View.GONE);

                    orderViewHolder.deliveredStatus.setVisibility(View.VISIBLE);

                }

                orderViewHolder.txtOrderId.setText(String.format("Order Id :  %s",OrderId));
                orderViewHolder.txtOrderStatus.setText(String.format("Order Status :  %s",OrderStatus));
                orderViewHolder.txtOrderTime.setText(String.format("Order Time : %s",OrderTime));
                orderViewHolder.txtOrderDate.setText(String.format("Order Date : %s",OrderDate));

                if (dialog.isShowing()){
                    dialog.dismiss();
                }

                //Prevention for app crash when user clicks
                orderViewHolder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void onClick(View view, int position, boolean isLongClick) {
                        Intent orderDetail = new Intent(getActivity(), OrderDetail.class);
                        orderDetail.putExtra("OrderId",OrderId)
                                .putExtra("OrderPhone",phone)
                                .putExtra("OrderTotal",OrderTotal)
                                .putExtra("OrderAddress",OrderAddress)
                                .putExtra("OrderComment",OrderComment)
                                .putExtra("OrderUserName",OrderUserName)
                                .putExtra("OrderTime",OrderTime)
                                .putExtra("OrderDate",OrderDate)
                                .putExtra("OrderStatus",request.getStatus());

                        startActivity(orderDetail);
                    }
                });

            }
        };
        adapter.notifyDataSetChanged();
        recyclerView.setAdapter(adapter);
    }

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那么您要按照0、1、2、3的顺序订购这些订单。

选项1:在呈现列表之前对数据进行排序。例如:

...
adapter = new FirebaseRecyclerAdapter<Request, OrderViewHolder>(
                Request.class,
                R.layout.order_layout,
                OrderViewHolder.class,
                requests.orderByChild("status").equalTo(phone)
        )
...

通过订购状态为requests.orderByChild("status").equalTo(phone)的数据,您列出的列表将显示状态为Orders的订单。当然,有了此更改,您的列表现在不再按电话号码排序。如果要按电话和状态进行排序,请提供更多代码。

选项2:如果您可以在创建适配器之前从firebase操纵数据,则可以将结果分为2个列表,一个列表的状态为0,1,2,另一个列表的状态为3。之后,添加2一张一张地列出适配器,并将适配器附加到回收站视图。

  

Recyclerview的底部内部就像底部显示的Amazon / Flipkart交付订单一样

因此,在这种情况下,您可以选择选项2吗?您可以对firebase进行2个查询:

  1. 状态为0,1,2的查询并保留.orderByChild("phone").equalTo(phone)
  2. 状态为3的查询并保留.orderByChild("phone").equalTo(phone)

然后将2列表追加到1列表中并创建适配器。

要进一步优化,您可以只查询1次,然后在本地将列表分为上述2个列表,以免查询两次。