【发布时间】:2021-06-05 03:43:45
【问题描述】:
我正在使用以下代码从 Firebase 设置 recyclerview。每次当新的孩子添加到firebase实时数据库并且recyclerview自动滚动到底部时,这都会获取整个数据。当用户在屏幕中间时,我需要停止 autoscroll recyclerview。
public void setUpRecyclerview() {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
modelList.clear();
for (DataSnapshot ds:dataSnapshot.getChildren()) {
String data = (String) ds.child("data").getValue();
long time = (long) ds.child("time").getValue();
String type = (String) ds.child("type").getValue();
DealsModel model = new DealsModel(data, time, type);
modelList.add(model);
count++;
}
dealAdapter = new DealAdapter(modelList);
LinearLayoutManager layoutManager = new LinearLayoutManager(DealsActivity.this);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(dealAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
我只需要在插入新孩子时执行此功能,这样用户屏幕就不会自动滚动到底部,并且浮动按钮上的计数器会显示新消息出现。喜欢 Whatsapp/Telegram。
RecyclerView.LayoutManager linearLayoutManager = recyclerView.getLayoutManager();
int lastVisiblePosition = ( (LinearLayoutManager) linearLayoutManager ).findLastCompletelyVisibleItemPosition();
int position1 = ( (LinearLayoutManager) linearLayoutManager ).findLastVisibleItemPosition();
if(position1 != lastVisiblePosition ) {
if (positionStart >= (totalItem - 1)) {
countMsg = countMsg + 1;
Log.e("Countmsg","."+countMsg);
}
}
else {
recyclerView.scrollToPosition(totalItem - 1);
}
我需要 positionStart 的值,即新插入的孩子的值。如何获得。
【问题讨论】:
标签: android firebase firebase-realtime-database android-recyclerview