gpt4 book ai didi

java - Firebase 到 ImageView - 为什么即使没有图像,我的聊天也会显示图像?

转载 作者:行者123 更新时间:2023-12-02 10:44:43 26 4
gpt4 key购买 nike

我有一个用于 Firebase 聊天的标准聊天显示方法:

private void displayChat() {

final ListView listOfMessage = findViewById(R.id.list_of_message);
final String DATABASE_URL = "https://firebasestorage.googleapis.com";
Query query = FirebaseDatabase.getInstance().getReference().child("messages").child(chatName).limitToLast(20);
FirebaseListOptions<Message> options = new FirebaseListOptions.Builder<Message>()
.setLayout(R.layout.list_item)
.setQuery(query, Message.class)
.setLifecycleOwner(this)
.build();

FirebaseListAdapter<Message> adapter = new FirebaseListAdapter<Message>(options) {
@Override
protected void populateView(View v, Message model, int position) {

//Get reference to the views of list_item.xml
TextView messageText, messageUser, messageTime;
ImageView img;
messageText = v.findViewById(R.id.message_text);
messageUser = v.findViewById(R.id.message_user);
messageTime = v.findViewById(R.id.message_time);
img = v.findViewById(R.id.imgView);
if (model.getMessageText().contains(DATABASE_URL)) {
messageText.setText("Image sent: ");
Picasso.with(getApplicationContext()).load(model.getMessageText()).into(img);
}
else {
messageText.setText(model.getMessageText());
}

messageUser.setText(model.getMessageUser());
messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", (long)model.getMessageTime().get("timestamp")));
}
};
listOfMessage.setAdapter(adapter);
}

聊天功能齐全。但是,当涉及到图像时,我有 DATABASE_URL 来确定接收到的内容应该是图像而不是文本,因此我按照上面的方式使用 Picasso 加载它:

 if (model.getMessageText().contains(DATABASE_URL)) {
messageText.setText("Image sent: ");
Picasso.with(getApplicationContext()).load(model.getMessageText()).into(img);
}

但是,当它是普通文本时,我的:

else {
messageText.setText(model.getMessageText());
}

将正常显示文本,但仍显示图像 - 始终显示最新的图像。我尝试将 img.setVisibility(View.INVISIBLE); 添加到 else 语句中,以及从 Glide/Picasso 中进行等效删除,但它们最终都会出现在每个图像中被删除且不显示。

最佳答案

发生这种情况是因为您正在重用一种布局类型。接下来显示的每个 View 都将重用前一个 View 。如果您不使布局 View 无效,则可能会发生其中一个 View 包含旧数据的情况。

这个布局就像一个骨架,您可以在其中固定一些元素。然后有人想重复使用你的骨架。他用你的东西得到了它。所以他必须删除所有元素,然后他才能固定自己的东西。如果你弯曲了骨架中的某些东西,下一个人将不得不伸直,否则他将拥有带有弯曲元素的骨架(即setVisibility(INVISIBLE)->setVisibility(VISIBLE))。

一旦获得布局,就重置所有 View 中的值。

关于java - Firebase 到 ImageView - 为什么即使没有图像,我的聊天也会显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52667980/

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