Firebase无限滚动列表视图滚动

时间:2017-06-27 10:27:55

标签: android listview firebase firebase-realtime-database infinite-scroll

我正在寻找一种方法来实现在我的Firebase应用程序中滚动的简单列表视图,但我没有找到任何方法如何实现它。我已经在互联网上尝试了2-3个教程和文档,但没有达到要求的结果。

在我的应用程序中,我希望滚动,例如在开始前10个列表项目时加载,然后每次滚动时,下一个10或20个项目将加载,直到最后一个项目出现在列表的底部。

所以我尝试通过以下方式检索前10个项目:

ArrayList<Event> event=new ArrayList<>();

Dbref = FirebaseDatabase.getInstance().getReference("/event");
Dbref.startAt(1).limitToLast(10).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Log.e("Events.java ", "range query started! : " + dataSnapshot.getChildrenCount());
                String event_id = snapshot.child("details").child("event_id").getValue().toString();
                e=new Event(event_id); //Event is a model class for list items
                event.add(e);
                Log.e("ShowEventInfo : ", "" + event_id);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    adapter=new Event_CustomAdapter(getActivity(),event); 
    ls.setAdapter(adapter); //here ls is instance of ListView

我提到了这个Youtube视频来实现这个功能: (https://www.youtube.com/watch?annotation_id=annotation_3916642001&feature=iv&src_vid=YMJSBHAZsso&v=XwIKb_f0Y_w

在上面的代码中,正如您所看到的,我正在生成Log以检查是否从firebase获取数据,但是我没有输出Android监视器。

我不知道如何在列表视图中实现Firebase滚动。我认为对于那些在回收站视图/列表视图中实现无限滚动的人来说,这是一个常见问题。

你能帮我实现这个功能吗?感谢。

1 个答案:

答案 0 :(得分:8)

在这里,我们将使用DatabaseReferencelimitToFirst(int)的{​​{1}}方法来获取limitToLast(int)的第一个或最后一个记录。

在下面的示例中,我使用FireBase仅从Firebase获取最高指定记录。在这里,我正在玩 oldestPostId ,这是我们记录的最后一个或第10个键。

limitToFirst(int)

从上面的代码中,我已经从firebase获得了前10条记录,现在我们将实现加载更多功能,因此我正在使用 private String oldestPostId; DatabaseReference Dbref = FirebaseDatabase.getInstance().getReference("/event"); /////GETTING FIRST 10 RECORDS FROM THE FIREBASE HERE Dbref.limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot child : dataSnapshot.getChildren()) { oldestPostId = child.getKey(); ////HERE WE ARE SAVING THE LAST POST_ID FROM URS POST dataSnapshot.getChildrenCount()); String event_id = snapshot.child("details").child("event_id").getValue().toString(); e=new Event(event_id); //Event is a model class for list items event.add(e); Log.e("ShowEventInfo : ", "" + event_id); } } @Override public void onCancelled(DatabaseError databaseError) { } }); &#39; s Listviewonscrolllistener,我们将isScrollCompleted()使用orderByKey()方法再获取10条记录。我已经实现了整个代码以获取limitToFirst()的更多数据,请查看以下示例。

isScrollCompleted()