我正在制作像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);
}
答案 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个查询:
.orderByChild("phone").equalTo(phone)
.orderByChild("phone").equalTo(phone)
然后将2列表追加到1列表中并创建适配器。
要进一步优化,您可以只查询1次,然后在本地将列表分为上述2个列表,以免查询两次。