Android 在recyclerview中首先订购最新的firebase数据

Android 在recyclerview中首先订购最新的firebase数据,android,firebase-realtime-database,android-recyclerview,Android,Firebase Realtime Database,Android Recyclerview,我的数据库结构如下 我在recyclerview中显示订单的子项,由于我使用firebase的推送生成键,recyclerview中的项目在顶部显示第一个订单,但我的目标正好相反(最近的订单显示在顶部)。希望我清楚 注意:我在recyclerview中使用分页,当前通过orderbyKey()显示 我尝试的 Negative和orderByChild中的时间戳(“时间戳”) 面临的问题:仅显示一个子项(在我的案例中仅显示MZFAKRKPYYYZOSWLLVPA) mLayoutManager.s

我的数据库结构如下

我在recyclerview中显示订单的子项,由于我使用firebase的
推送
生成键,recyclerview中的项目在顶部显示第一个订单,但我的目标正好相反(最近的订单显示在顶部)。希望我清楚

注意:我在recyclerview中使用分页,当前通过
orderbyKey()显示

我尝试的

  • Negative和
    orderByChild中的时间戳(“时间戳”)
  • 面临的问题:仅显示一个子项(在我的案例中仅显示MZFAKRKPYYYZOSWLLVPA)

  • mLayoutManager.setStackFromEnd(true);和mLayoutManager.setReverseLayout(true); 面临的问题:这不符合目标,因为它不会将最近下的订单显示为第一个

  • Collections.reverse(myList)在传递到适配器之前,适配器没有任何更改

  • 有没有什么我看不到的,或者我已经试过了,但是没有找到正确的方法?在这一点上有什么帮助吗?已经谢谢了

    编辑:我的代码

    订单类别代码:

        public class Orders extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_orders);
    
            //HOOKS
            getHooks();
    
            final LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
            mLayoutManager.setStackFromEnd(true);
            mLayoutManager.setReverseLayout(true);
            mRV.setLayoutManager(mLayoutManager);
    
    
            ordersRef=FirebaseInit.getDatabase().getReference("USERS/"+phonenumber+"/orders");
    
            mAdapter = new OrdersAdapter();
            mRV.setAdapter(mAdapter);
    
            getOrders(null);
            
            mRV.addOnScrollListener(new RecyclerView.OnScrollListener() {
    
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
    
                    mTotalItemCount = mLayoutManager.getItemCount();
                    mLastVisibleItemPosition = mLayoutManager.findLastVisibleItemPosition();
    
                    if (!mIsLoading && mTotalItemCount <= (mLastVisibleItemPosition + mPostsPerPage)) {
                        getOrders(mAdapter.getLastItemId());
                        mIsLoading = true;
                    }
                }
            });
        }
    
        private void getHooks() {
            mRV=findViewById(R.id.orders_recyclerview);
        }
    
        private void getSharedPreferencesData() {
            SharedPreferences sharedPreferences=getSharedPreferences("in.veggiefy.androidapp.userdetails", Context.MODE_PRIVATE);
            phonenumber=sharedPreferences.getString("PHONE",null);
            DEPOT_KEY=sharedPreferences.getString("DEPOTKEY","D_1");
            DC_KEY=sharedPreferences.getString("DCKEY","DC_1");
    
        }
    
        private void getOrders(String nodeId) {
            Query query;
    
            if (nodeId == null)
                query = FirebaseInitNonPersistent.getDatabase().getReference("USERS/"+phonenumber+"/orders")
                        .orderByKey()
                        //.orderByChild("timestamp")
                        .limitToFirst(mPostsPerPage);
            else
                query = FirebaseInitNonPersistent.getDatabase().getReference("USERS/"+phonenumber+"/orders")
                        .orderByKey()
                        //.orderByChild("timestamp")
                        .startAfter(nodeId)
                        .limitToFirst(mPostsPerPage);
    
            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                    OrdersModel order;
                    List<OrdersModel> orderModels = new ArrayList<>();
                    
                    for (DataSnapshot orderSnapshot : snapshot.getChildren()) {
                        if(orderSnapshot.child("details").exists() && orderSnapshot.child("details").getValue(OrdersModel.class)!=null){
                            
                            orderModels.add(orderSnapshot.child("details").getValue(OrdersModel.class));
                        }
                    }
                    mAdapter.addAll(orderModels);
                    mIsLoading = false;
    
                }
    
    
                @Override
                public void onCancelled(@NonNull DatabaseError error) {
    
                }
            });
    
        }
    
    }
    

    是的,代码是必需的,因此我们可以看到并理解是什么产生了这种行为。
        public class OrdersAdapter extends RecyclerView.Adapter<OrdersViewHolder> {
    
        private List<OrdersModel> order;
    
        public OrdersAdapter() {
            this.order = new ArrayList<>();
        }
    
        @Override
        public OrdersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new OrdersViewHolder(LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.order_item_layout, parent, false));
        }
    
        @Override
        public void onBindViewHolder(OrdersViewHolder holder, int position) {
            holder.setData(order.get(position));
        }
    
        @Override
        public int getItemCount() {
            return order.size();
        }
    
        public void addAll(List<OrdersModel> newOrders) {
            int initialSize = order.size();
            order.addAll(newOrders);
            notifyItemRangeInserted(initialSize, newOrders.size());
        }
    
        public String getLastItemId() {
            return order.get(order.size() - 1).getOrderid();
    
        }
    
    }
    
    public class OrdersViewHolder extends RecyclerView.ViewHolder {
    
        TextView orderIdText,orderDateText;
        ImageView rightArrowIcon;
    
        public OrdersViewHolder(@NonNull View itemView) {
            super(itemView);
            findViews(itemView);
        }
        private void findViews(View view) {
    
            orderIdText=view.findViewById(R.id.order_id_textview);
            orderDateText=view.findViewById(R.id.order_date_textview);
            rightArrowIcon=view.findViewById(R.id.right_arrow_imageView);
    
        }
    
        public void setData(OrdersModel ordersModel) {
    
            orderIdText.setText("ID :"+ordersModel.getOrderid());
            orderDateText.setText(ordersModel.getOrdertime());
            }
    
        }
    }