Anu*_*mar 3 android listview infinite-scroll firebase firebase-realtime-database
我正在寻找一种方法来实现在我的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
Run Code Online (Sandbox Code Playgroud)
我推荐了这个Youtube视频来实现这个功能:(https://www.youtube.com/watch?annotation_id=annotation_3916642001&feature=iv&src_vid=YMJSBHAZsso&v=XwIKb_f0Y_w)
在上面的代码中,正如您所看到的,我正在生成Log以检查是否从firebase获取了数据,但是我没有输出Android监视器.
我不知道如何在列表视图中实现Firebase滚动.我认为对于那些在回收站视图/列表视图中实现无限滚动的人来说,这是一个常见问题.
你能帮我实现这个功能吗?谢谢.
Rav*_*aha 10
在这里,我们将使用OR DatabaseReference的方法来获取第一个或最后一个记录.limitToFirst(int)limitToLast(int)FireBase
在下面的示例中,我使用的 limitToFirst(int)是仅从Firebase获取最高指定记录.在这里,我正在使用oldestPostId,这是我们记录的最后一个或第十个键.
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
从上面的代码,我已经从firebase获得前10条记录,现在我们将实现加载更多功能,所以我使用Listview's onscrolllistener
On isScrollCompleted()我们将使用方法orderByKey()进一步获得10条记录limitToFirst().我已经实现了整个代码以获取更多数据isScrollCompleted() ,请查看以下示例.
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) {
}
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |