如何将新添加的数据从firebase添加到recyclerview的顶部而不是底部?请看细节

时间:2016-06-25 06:05:15

标签: android firebase android-recyclerview firebase-realtime-database

我正在开发一个应用程序,其中我从Firebase数据库中检索一些数据。

问题在于每次我保存某些东西时,它都会被检索并被添加到RecyclerView的底部。

我想要的是我希望新添加的数据被添加到recyclerview的顶部而不是底部。

我不知道该怎么做我想做的事。

请告诉我。

2 个答案:

答案 0 :(得分:4)

首先问题是关于recyclerview并且您发布了数据检索的代码。如果您想将新项目添加到回收站视图,请使用

mArrayList.add(position, item);
notifyItemInserted(position); 

要在第一行中插入数据使用

mArrayList.add(0, item);
notifyItemInserted(0); 

然后您可以使用mRecyclerView.smoothScrollToPosition(0);滚动到顶部。

答案 1 :(得分:2)

尝试类似

的内容
Query lastToFirstQuery = databaseReference.orderBy("something_in_your_database").limitToLast(datasnapshot.numChildren());

lastToFirstQuery.addChildEventListener(new ChildEventListener() { 
        @Override 
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Map<String, String> newRequest = (Map<String, String>) dataSnapshot.getValue();
            imageUID = newRequest.get("imageUIDh");
            hDescription = newRequest.get("hDescription");
            currentLat = newRequest.get("currentLat");
            currentLng = newRequest.get("currentLng");
            postedBy = newRequest.get("postedBy");
            postedAtTime = newRequest.get("postedAtTime");
            postedOnDate = newRequest.get("postedOnDate");
            utcFormatDateTime = newRequest.get("utcFormatDateTime");

        } 

        @Override 
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        } 

        @Override 
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        } 

        @Override 
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) {
            Snackbar snackbar = Snackbar
                    .make(coordinatorLayout, databaseError.getMessage(), Snackbar.LENGTH_LONG);
            snackbar.setDuration(Snackbar.LENGTH_SHORT);
            snackbar.show();
            progressBarLoading.setVisibility(View.INVISIBLE);
        } 
    });