如何在onResume()和onPause()之后停止适配器中RecyclerView的闪烁



我有一个聊天应用程序,它使用RecyclerView来存储聊天。聊天包含图像和文本。它使用Firebase数据库来存储和检索数据。此外,我已经存储了用户的当前状态(联机/脱机(。用户的当前状态显示在工具栏中。onResume((方法将用户状态设置为";在线";onPause((方法将用户状态设置为"暂停";离线";。每当一个用户更改其状态时,整个Recycler View都会在另一个用户的UI上闪烁。

消息活动图像

因此,在这里,如果我正在给用户发消息,并且该用户将其状态更改为联机或脱机(显示在工具栏中(,则图像会闪烁。此外,如果我向上滚动查看以前的消息,同时,如果用户更改其状态,RecyclerView会自动滚动到最后一条。

当用户更改状态时,如何停止消息的闪烁和自动滚动?

我尝试使用ItemAnimator禁用RecyclerView的动画,但没有成功。我不知道这是RecyclerView的问题还是使用Glide库的问题。这是用于从数据库中获取值的代码。

databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
username.setText(user.getName());
if(user.getImageURL().equals("default")){
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
Glide.with(getApplicationContext()).load(user.getImageURL()).into(profile_image);
}
if(user.getStatus().equals("online")){
status.setText("online");
}else{
status.setText("offline");
}
readMessages(fuser.getUid(), userid, user.getImageURL());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});

这是关于如何切换状态的代码。

private void status(String status){
databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("status", status);
databaseReference.updateChildren(hashMap);
}
@Override
protected void onResume() {
super.onResume();
status("online");
}
@Override
protected void onPause() {
super.onPause();
status("offline");
}

这是每次状态改变时都会闪烁的回收视图。

private void readMessages(final String myid, final String userid, final String imageURL){
mChats = new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference("Chats").child(myid).child(userid);
databaseReference.keepSynced(true);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mChats.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
Chat chats = snapshot.getValue(Chat.class);
if(chats.getReceiver().equals(myid) && chats.getSender().equals(userid) ||
chats.getReceiver().equals(userid) && chats.getSender().equals(myid))
mChats.add(chats);
}
messageAdapter = new MessageAdapter(MessageActivity.this, mChats, imageURL);
recyclerView.setAdapter(messageAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}

//避免recyclerview 闪烁

((SimpleItemAnimator) myRecyclerview.getItemAnimator()).setSupportsChangeAnimations(false);

myRecyclerview.setItemAnimator(null);

初始化myRecyclerview 后立即执行此操作

相关内容

  • 没有找到相关文章

最新更新