滑动RecyclerView以添加较旧的Firebase数据

时间:2018-07-18 15:35:42

标签: android firebase android-recyclerview

使用RecyclerViewSwipeRefreshLayout添加较旧的数据时遇到了问题,因此,这就是我从Firebase检索并将数据放入RecyclerView的方法

private void messageList() {
        referenceMessages.orderByKey().limitToLast(10).addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
                result.add(messages);
                adapter.notifyDataSetChanged();


            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
                result.remove(messages);
                adapter.notifyDataSetChanged();
            }


            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

正如我所看到的,我将检索到的邮件的限制设置为最近10条,这意味着将显示10条最新的邮件。到目前为止,一切正常,消息显示为

-20thmessage(the oldest)-
-21stmessage-
-...-
-29thmessage-
-30thmessage(the newest)-

现在我这样使用SwipeRefreshLayout

 private void swipe(){
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                referenceMessages.orderByKey().endAt("-LHUhkub4iaZNNzmtUcs").limitToLast(10).addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                        MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
                        recyclerView.scrollToPosition(0);
                        result.add(0, messages);
                        adapter.notifyDataSetChanged();


                    }

                    @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) {

                    }
                });

            }
        });

    }

并且它可以正确地检索数据,我的意思是前10条消息在硬编码endAt()之前但在刷卡后不能正确地放置数据。如果我不使用index 0 新数据被放置在最新消息的底部,看起来像这样

-30thmessage(the newest)-
-10thmessage-
-...-
-19thmessage-
-20thmessage(the newest)-

当我使用index 0时,数据是从已加载的消息的顶部添加的,但是像这样

-20thmessage(the oldest)-
-19thmessage-
-...-
-11ththmessage-
-10th-

,所以它被上下颠倒了。希望你能理解我的意思:)任何输入都将受到赞赏

1 个答案:

答案 0 :(得分:1)

您可以先尝试清除列表,然后添加新消息。

Android SwipeRefreshLayoutBasic