Firebase infinite scroll list view Load 10 items on Scrolling [duplicate]

≯℡__Kan透↙ 提交于 2019-11-28 09:33:10

Here we will use the DatabaseReference;s methods which are limitToFirst(int) OR limitToLast(int) to get the first or last records from FireBase.

In below example i am using the limitToFirst(int) to get only top specified records from Firebase. Here i am playing with oldestPostId which is the last or 10th key of our record.

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

            }
        });

From above code , i have get the first 10 records from firebase, Now we will implement load more functionality so i am using the Listview's onscrolllistener On isScrollCompleted() we will use orderByKey() for getting further 10 more record with limitToFirst() method. I have implemented the whole code to get further data on isScrollCompleted() , please check below example.

YOUR_LISTVIEW.setOnScrollListener(new OnScrollListener() {
    private int currentVisibleItemCount;
    private int currentScrollState;
    private int currentFirstVisibleItem;
    private int totalItem;
    private LinearLayout lBelow;


    @Override
    public void onScrollStateChanged (AbsListView view,int scrollState){
        // TODO Auto-generated method stub
        this.currentScrollState = scrollState;
        this.isScrollCompleted();
    }

    @Override
    public void onScroll (AbsListView view,int firstVisibleItem,
    int visibleItemCount, int totalItemCount){
        // TODO Auto-generated method stub
        this.currentFirstVisibleItem = firstVisibleItem;
        this.currentVisibleItemCount = visibleItemCount;
        this.totalItem = totalItemCount;


    }

    private void isScrollCompleted () {
        if (totalItem - currentFirstVisibleItem == currentVisibleItemCount
                && this.currentScrollState == SCROLL_STATE_IDLE) {
            /** To do code here*/
            Dbref.orderByKey().startAt(oldestPostId).limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot child : dataSnapshot.getChildren()) {

                        oldestPostId = child.getKey();
                        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) {

                }
            });

        }
    });

});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!