gpt4 book ai didi

java - Firebase数据库分页滚动操作

转载 作者:太空宇宙 更新时间:2023-11-04 10:14:18 24 4
gpt4 key购买 nike

我正在按照教程进行操作: https://codelabs.developers.google.com/codelabs/firebase-android/#6

我试图实现分页,这是我修改的内容:

...
Query query = databaseRef.limitToLast(50);
...
FirebaseRecyclerOptions<FriendlyMessage> options =
new FirebaseRecyclerOptions.Builder<FriendlyMessage>()
.setQuery(query, parser)
.build();
...

这是默认的滚动代码作为教程:

mFirebaseAdapter.registerAdapterDataObserver(new 
RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mFirebaseAdapter.getItemCount();
int lastVisiblePosition =
mLinearLayoutManager.findLastCompletelyVisibleItemPosition();
// If the recycler view is initially being loaded or the
// user is at the bottom of the list, scroll to the bottom
// of the list to show the newly added message.
if (lastVisiblePosition == -1 ||
(positionStart >= (friendlyMessageCount - 1) &&
lastVisiblePosition == (positionStart - 1))) {
mMessageRecyclerView.scrollToPosition(positionStart);
}
}
});

mMessageRecyclerView.setAdapter(mFirebaseAdapter);

现在屏幕仅显示 50 条消息。

但是当新消息到来时它不会滚动到底部。在使用查询之前它工作正常。

我想知道应该从哪里开始修改。

谢谢。

最佳答案

从快速方面:

通过改变startKey,我们可以从我们想要的地方(从数据库末尾开始)查询数据,并通过滚动到屏幕顶部来实现分页。

if (startKey == nil){
print("firebasetest_startkey: ",self.startKey)
// for first grabbing data operation

_refHandle = self.ref.child(channel_title).queryOrderedByKey().queryLimited(toLast: 30).observe(.value){(snapshot) in
guard let children = snapshot.children.allObjects.first as? DataSnapshot else{return}
if (snapshot.childrenCount > 0){
for child in snapshot.children.allObjects as! [DataSnapshot]{
if(!(self.messageKeys.contains((child as AnyObject).key))){
self.messages.append(child)
self.messageKeys.append(child.key)
self.itemTable.insertRows(at: [IndexPath(row: self.messages.count-1, section: 0)], with: .automatic)
}
}
self.startKey = children.key
}
}
}else if (dragdirection == 0 && startKey != nil){
//going up
// for all other grabbing data operation from the bottom of the database

_refHandle = self.ref.child(channel_title).queryOrderedByKey().queryEnding(atValue: self.startKey).queryLimited(toLast: 10).observe(.value){(snapshot) in
guard let children = snapshot.children.allObjects.first as? DataSnapshot else{return}
if (snapshot.childrenCount > 0 ){
for child in snapshot.children.reversed(){
if ((child as AnyObject).key != self.startKey &&
!(self.messageKeys.contains((child as AnyObject).key))){
self.messages.insert(child as! DataSnapshot, at:0)
self.messageKeys.append((child as AnyObject).key)
self.itemTable.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
}
}
self.startKey = children.key
}
}
}

关于java - Firebase数据库分页滚动操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51908095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com