Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase到ImageView-为什么即使没有图像,我的聊天室也会显示图像?_Java_Android_Firebase - Fatal编程技术网

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

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

我有一个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);
}
但是,当它是普通文本时,我的:

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

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

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

这个布局就像一个骨架,可以固定一些元素。然后有人想重用你的骨架。他是用你的东西弄来的。所以他必须移除所有元素,然后他可以钉住自己的东西。如果你弯曲骨架中的某个东西,下一个家伙将必须伸直,否则他将拥有弯曲元素的骨架(即
setVisibility(不可见)->setVisibility(可见)


一旦获得布局,请重置所有视图中的值。

当我获得布局时,如何重置所有视图中的值?好的,我做到了。我所要做的就是在if语句中添加
img.setVisibility(View.VISIBLE)
else {
     messageText.setText(model.getMessageText());
}