然而现在我从FireBase一次获取所有数据.我想做什么,一次获取LIMITS中的数据,如15条记录.就像在第一次用户从中获取15条记录Firebase时,当用户在屏幕的底部/顶部加载更多数据时,应该有15条记录来自Firebase并添加到列表的底部/ TOP.
我已经实现了逻辑,以便从数据库的顶部或底部获取15条记录,Firebase如下所示: -
public class ChatActivity extends AppCompatActivity implements FirebaseAuth.AuthStateListener {
private FirebaseAuth mAuth;
private DatabaseReference mChatRef;
private Query postQuery;
private String newestPostId;
private String oldestPostId;
private int startAt = 0;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
mAuth = FirebaseAuth.getInstance();
mAuth.addAuthStateListener(this);
mChatRef = FirebaseDatabase.getInstance().getReference();
mChatRef = mChatRef.child("chats");
/////GETTING THE VIEW ID OF SWIPE LAYOUT
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
/////GETTING FIRST 10 RECORDS …Run Code Online (Sandbox Code Playgroud) android firebase firebase-realtime-database firebase-storage
有没有办法从限制和偏移的firebase检索数据?例如,我的firebaseRef中有大约1000个元素,并希望开发某种分页.有没有办法可以在不加载完整的对象列表的情况下完成.
现在我正在使用queryLimitedToLast(limit)它并limit为每一页增加.但是这种方法不允许我计算页数.
更新:
有一件事我没有提到,但这非常重要.我的数据从最后到第一个显示.想象一下,这是一个简单的信使但是有了分页.所以我想显示最后20个项目,然后是20个之前的20个等等.
谢谢.
我正在使用https://github.com/firebase/FirebaseUI-Android/tree/master/database中描述的FirebaseIndexRecyclerAdapter .但我的列表有很多项目,我想首先只加载一些项目,然后在用户向上滚动时懒惰加载其余项目.
我的第一个想法是我可以使用mKeyRef.limitToLast(5)但是然后更新这需要重新创建适配器,对吗?
我如何实现这种延迟加载机制?
RecyclerView recycler = (RecyclerView) findViewById(R.id.messages_recycler);
recycler.setHasFixedSize(true);
recycler.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new FirebaseIndexRecyclerAdapter<Chat, ChatHolder>(
Chat.class,
android.R.layout.two_line_list_item,
ChatHolder.class, mIndexRef,
mDataRef) {
@Override
public void populateViewHolder(ChatHolder chatMessageViewHolder, Chat chatMessage, int position) {
chatMessageViewHolder.setName(chatMessage.getName());
chatMessageViewHolder.setText(chatMessage.getText());
}
};
recycler.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)