Java Firebase到ImageView-为什么即使没有图像,我的聊天室也会显示图像?
我有一个Firebase聊天的标准聊天显示方法:Java Firebase到ImageView-为什么即使没有图像,我的聊天室也会显示图像?,java,android,firebase,Java,Android,Firebase,我有一个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().g
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);
}
但是,当它是普通文本时,我的:
else {
messageText.setText(model.getMessageText());
}
将正常显示文本,但仍显示图像-始终显示最近显示的图像。我尝试添加
img.setVisibility(View.INVISIBLE)将>编码到else
语句中,以及从Glide/Picasso中删除的等效内容中,但它们最终都会出现在每个被删除且未显示的图像中。这是因为您正在重用一种布局类型。接下来显示的每个视图都将重用前一个视图。如果不使布局的视图无效,则可能出现其中一个视图将包含旧数据的情况
这个布局就像一个骨架,可以固定一些元素。然后有人想重用你的骨架。他是用你的东西弄来的。所以他必须移除所有元素,然后他可以钉住自己的东西。如果你弯曲骨架中的某个东西,下一个家伙将必须伸直,否则他将拥有弯曲元素的骨架(即setVisibility(不可见)->setVisibility(可见)
)
一旦获得布局,请重置所有视图中的值。当我获得布局时,如何重置所有视图中的值?好的,我做到了。我所要做的就是在if语句中添加img.setVisibility(View.VISIBLE)
。
else {
messageText.setText(model.getMessageText());
}