【问题标题】:RecyclerView swipe to add older Firebase DataRecyclerView 滑动以添加较旧的 Firebase 数据
【发布时间】:2018-07-18 15:35:41
【问题描述】:

我在使用SwipeRefreshLayout 将旧数据添加到RecyclerView 时遇到问题,所以,这是我从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) {

                    }
                });

            }
        });

    }

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

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

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

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

所以它是颠倒添加的。希望你能理解我:) 任何意见都非常感谢

【问题讨论】:

    标签: android firebase android-recyclerview


    【解决方案1】:

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

    Android SwipeRefreshLayoutBasic

    【讨论】:

    • 是的,这是 SwipeRefresh 的预期行为,另一个选项是通过 RecyclerView github.com/firebase/FirebaseUI-Android/blob/master/firestore/…处理刷新
    • 好吧,此时我使用了你的想法,并在刷新时不断清除,每次刷新会增加检索到的消息数量,但它仍然会在每次刷新时下载整个数据
    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2021-01-30
    • 2017-06-12
    • 1970-01-01
    相关资源
    最近更新 更多