Android 在recyclerview中首先订购最新的firebase数据
我的数据库结构如下 我在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中的项目在顶部显示第一个订单,但我的目标正好相反(最近的订单显示在顶部)。希望我清楚
注意:我在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());
}
}
}