Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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 在聊天活动中滚动后,我在聊天中发送的图像会显示多次_Java_Android_Android Recyclerview_Picasso - Fatal编程技术网

Java 在聊天活动中滚动后,我在聊天中发送的图像会显示多次

Java 在聊天活动中滚动后,我在聊天中发送的图像会显示多次,java,android,android-recyclerview,picasso,Java,Android,Android Recyclerview,Picasso,我可以在对话中成功发送图像,但每当我滚动图像时,图像都会显示多次。我已成功从firebase检索图像的URL 这是我的RecyclerView的ViewHolder public class MessageViewHolder extends RecyclerView.ViewHolder { public TextView messageText; public CircleImageView profileImage; public TextView display

我可以在对话中成功发送图像,但每当我滚动图像时,图像都会显示多次。我已成功从firebase检索图像的URL

这是我的
RecyclerView
ViewHolder

public class MessageViewHolder extends RecyclerView.ViewHolder {

    public TextView messageText;
    public CircleImageView profileImage;
    public TextView displayName;
    public ImageView messageImage;

    public TextView timeText;

    public MessageViewHolder(View view) {
        super(view);

        timeText = view.findViewById(R.id.time_text_layout);
        messageText = (TextView) view.findViewById(R.id.message_text_layout);
        profileImage = (CircleImageView) view.findViewById(R.id.message_profile_layout);
        //   displayName = (TextView) view.findViewById(R.id.name_text_layout);
        messageImage = (ImageView) view.findViewById(R.id.message_image_layout);
    }
}
下面是我的适配器中的
onBindViewHolder
和一些其他函数

@Override
public void onBindViewHolder(final MessageViewHolder viewHolder, int i) {

    Messages c = mMessageList.get(i);

    final String from_user = c.getFrom();
    String message_type = c.getType();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(from_user);
    mUserDatabase.keepSynced(true);
    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            // String name = dataSnapshot.child("name").getValue().toString();
            String image = dataSnapshot.child("thumb_image").getValue().toString();

            fuser = FirebaseAuth.getInstance().getCurrentUser();
            if (!from_user.equals(fuser.getUid())) {

                // viewHolder.displayName.setText(name);
                Picasso.with(viewHolder.profileImage.getContext()).load(image)
                        .placeholder(R.drawable.default_avatar).into(viewHolder.profileImage);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    if (message_type.equals("text")) {
        // viewHolder.messageText.setText(View.VISIBLE);
        viewHolder.messageText.setText(c.getMessage());
    } else {
        // viewHolder.messageText.setText(c.getMessage());
        viewHolder.messageImage.setVisibility(View.VISIBLE);
        Picasso.with(viewHolder.messageImage.getContext()).load(c.getMessage())
                .placeholder(R.drawable.default_avatar).into(viewHolder.messageImage);
    }
}

@Override
public int getItemCount() {
    return mMessageList.size();
}

@Override
public int getItemViewType(int position) {
    String fuser = FirebaseAuth.getInstance().getCurrentUser().getUid().toString();
    if (mMessageList.get(position).getFrom().equals(fuser)) {
        return MSG_TYPE_RIGHT;
    } else {
        return MSG_TYPE_LEFT;

    }
}

我没有得到这个代码的任何错误。我已经尝试了所有方法,但无法阻止它多次显示图像。

在您的
onBindViewHolder
功能中,我认为您缺少
其他部分。您需要为
RecyclerView
的每个项目正确放置配置文件图像,如下所示

if (!from_user.equals(fuser.getUid())) {
    Picasso.with(viewHolder.profileImage.getContext()).load(image).placeholder(R.drawable.default_avatar).into(viewHolder.profileImage);
} else {
    // Load the default avatar when the above condition fails.
    Picasso.with(viewHolder.profileImage.getContext()).load(R.drawable.default_avatar).into(viewHolder.profileImage);
}
另一个类似的错误出现在代码的下面部分

if(message_type.equals("text")) {
    // You need to set the visibility of the message image here as well
    viewHolder.messageImage.setVisibility(View.GONE);
    viewHolder.messageText.setText(c.getMessage());
} else {
    viewHolder.messageImage.setVisibility(View.VISIBLE);
    Picasso.with(viewHolder.messageImage.getContext()).load(c.getMessage()).placeholder(R.drawable.default_avatar).into(viewHolder.messageImage);
}

希望这能解决您的问题。

欢迎使用StackOverflow。这个问题很好也很清楚。请检查我下面的答案,并让我知道这是否解决了您的问题。:)是的,它在工作。我以前也试过,但后来不起作用了。无论如何,谢谢你知道这有帮助真是太好了!如果有帮助,请接受答案。:)