Firebase 无限滚动列表视图在滚动时加载 10 个项目
Firebase infinite scroll list view Load 10 items on Scrolling
我正在寻找一种方法来在我的 Firebase 应用程序中实现简单的列表视图滚动,但我不知道如何实现它。我已经尝试了 2-3 个教程和 Internet 上可用的文档,但没有得到所需的结果。
在我的应用程序中,我希望在开始加载前 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)
在上面的代码中,如您所见,我正在生成日志以检查是否从 firebase 获取数据,但我没有输出 Android 监视器。
我不知道如何在我的列表视图中实现 Firebase 滚动。我认为对于那些在回收器视图/列表视图中实现无限滚动的人来说,这是一个常见的问题。
你能帮我实现这个功能吗?谢谢
这里我们将使用 DatabaseReference
;s 方法 limitToFirst(int)
或 limitToLast(int)
从 FireBase
.
中获取第一条或最后一条记录
在下面的示例中,我使用 limitToFirst(int)
仅从 Firebase 获取指定的最高记录。我在这里玩 oldestPostId 这是我们记录的最后一个或 10th 键。
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) {
}
});
从上面的代码中,我已经从 firebase 获得了前 10 条记录,现在我们将实现加载更多功能,所以我正在使用 Listview
的 onscrolllistener
在 isScrollCompleted()
上,我们将使用 orderByKey()
通过 limitToFirst()
方法进一步获取 10 条记录。我已经实现了整个代码以获取有关 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) {
}
});
}
});
});
我正在寻找一种方法来在我的 Firebase 应用程序中实现简单的列表视图滚动,但我不知道如何实现它。我已经尝试了 2-3 个教程和 Internet 上可用的文档,但没有得到所需的结果。
在我的应用程序中,我希望在开始加载前 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)
在上面的代码中,如您所见,我正在生成日志以检查是否从 firebase 获取数据,但我没有输出 Android 监视器。
我不知道如何在我的列表视图中实现 Firebase 滚动。我认为对于那些在回收器视图/列表视图中实现无限滚动的人来说,这是一个常见的问题。
你能帮我实现这个功能吗?谢谢
这里我们将使用 DatabaseReference
;s 方法 limitToFirst(int)
或 limitToLast(int)
从 FireBase
.
中获取第一条或最后一条记录
在下面的示例中,我使用 limitToFirst(int)
仅从 Firebase 获取指定的最高记录。我在这里玩 oldestPostId 这是我们记录的最后一个或 10th 键。
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) {
}
});
从上面的代码中,我已经从 firebase 获得了前 10 条记录,现在我们将实现加载更多功能,所以我正在使用 Listview
的 onscrolllistener
在 isScrollCompleted()
上,我们将使用 orderByKey()
通过 limitToFirst()
方法进一步获取 10 条记录。我已经实现了整个代码以获取有关 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) {
}
});
}
});
});