gpt4 book ai didi

android - 滚动后未正确应用聊天 2 不同持有人的 FirebaseUI Recycler View

转载 作者:行者123 更新时间:2023-11-29 00:53:11 25 4
gpt4 key购买 nike

我正在制作一个聊天应用程序。有 2 个 View 相同的 viewholder。问题是,当我滚动到顶部时,图像、名称没有按假设正确插入。我正在为实时数据库使用 Firebase Ui Recycler View。

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<AdminMessage, AdminChatViewHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull final AdminChatViewHolder adminChatViewHolder, int i, @NonNull AdminMessage adminMessage) {

adminChatViewHolder.getTvMessage().setText(adminMessage.getMessage());



//We retrieve the userUid to get real time name
FirebaseDatabase.getInstance().getReference().child("admin").child(adminMessage.getSenderUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Admin admin = dataSnapshot.getValue(Admin.class);
if (admin != null) {
final String nameAdmin = admin.getFullName();
final String profileUrl = admin.getProfileUrl();

//And then display
adminChatViewHolder.getTvName().setText(nameAdmin);

//Check for image if null or not (profileUrl)
if (profileUrl != null) {
Glide.with(getApplicationContext())
.load(profileUrl)
.into(adminChatViewHolder.getImageView());
}
}
}
}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
});

}


@NonNull
@Override
public AdminChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
if (viewType == VT_SENDER) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_admin_message_sender, parent, false);
} else {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_admin_message_receiver, parent, false);
}
return new AdminChatViewHolder(view);
}

@Override
public void onDataChanged() {
progressBar.setVisibility(View.GONE);
}

@Override
public int getItemViewType(int position) {
if (getItem(position).getSenderUid().equals(userUid)) {
return VT_SENDER;
}
return VT_RECEIVER;
}
};

最佳答案

好的,我记得我之前遇到过同样的问题。我会尽我所能记住并更新此答案。

当没有图像或 url 失败时,始终清空 ImageView 或将其隐藏:

if (profileUrl != null) {
Glide.with(getApplicationContext())
.load(profileUrl)
.into(adminChatViewHolder.getImageView());
}
else
{
//TODO: set an image place holder or hide adminChatViewHolder.getImageView()
}

我喜欢在等待新图像加载时清空 imageView并为所有 View 做同样的事情,而不仅仅是 imageView(即 textview)如果 admin 为空怎么办?会发生什么?

不要忘记调用 super.onDataChanged();

关于android - 滚动后未正确应用聊天 2 不同持有人的 FirebaseUI Recycler View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573601/

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