【发布时间】:2021-02-18 17:04:01
【问题描述】:
从文档中说分页适配器不适合聊天应用程序,所以我尝试在 swipeTorefreshLayout 中进行分页
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mItemPosition=0;
int difference =(int)size-messagesList.size();
if(difference>10){
page_size =10;
}else {
page_size=difference+1;
}
if(difference>0){
fetchMoreMessages();
}else {
swipeRefreshLayout.setRefreshing(false);
}
}
});
我还使用 limitToLast 方法在 fetchMesages 方法中获取 10 条最新消息
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
if (snapshot.exists()) {
Messages messages = snapshot.getValue(messages.class)
mItemPosition++;
if(mItemPosition==1){
mLastKey =snapshot.getKey();
mPrevKey = snapshot.getKey();
}
messagesList.add(messages);
adapter.notifyDataSetChanged();
mRecyclerView.smoothScrollToPosition(messagesList.size() - 1);
swipeRefreshLayout.setRefreshing(false);
}
messageQuery = pairRef.orderByKey().limitToLast(10);
messageQuery.addChildEventListener(mChildEventListener);
fetchMoreMessages 方法
if(moreChildEventListener ==null){
moreChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
if (snapshot.exists()) {
Messages messages = snapshot.getValue(messages.class)
if(!messageKey.equals(mPrevKey)){
messagesList.add(mItemPosition++,messages);
}else {
mPrevKey = mLastKey;
}
}
if(mItemPosition==1) {
mLastKey = snapshot.getKey();
}
adapter.notifyDataSetChanged();
swipeRefreshLayout.setRefreshing(false);
问题是,当我添加一条新消息时,它会在最后一条消息之后的正确位置显示两次,另一条将显示两条消息,即我之前在 limitToLast 方法()中显示的消息,并在其下方显示新消息
messag10
messag2
messag3
new message
message10
new message
如果我重新启动活动,它将按原样显示(一条消息)这也用于删除 我认为这个问题是因为使用 limitTolast() 我花了很多天来寻找解决方案并创建分页,所以如何做到这一点,或者是否有另一种添加分页的最佳方法?任何帮助表示赞赏
【问题讨论】:
-
说明分页适配器不适合聊天应用程序的文档没有任何意义。如果您只想显示最后 10 条消息怎么办?当然,分页对于任何类型的冗长列表都是有意义的。我认为需要澄清
-
@Jay 使用分页适配器时添加新消息时出现的问题,除非我重新启动活动,否则它不会显示,所以我浪费了实时功能
-
首先请更新您的问题并提供更多代码,一些变量使用不明确,以便我们提供帮助。其次,在这种情况下滑动刷新布局不是一个好的用户体验,所以你可以在你的 Recycleview 适配器上尝试 onScroll
-
@HossamAli 我试过 onScroll 但它一直滚动到底部,如果你有一些代码来实现 onscroll 并在滚动到顶部以获取更多消息时添加更多消息,请提供它,我试过了很多但没有任何结果
标签: android firebase firebase-realtime-database pagination android-paging