java - RecyclerView 更新而不刷新适配器列表

标签 java android android-recyclerview

我正在尝试构建一个聊天应用程序,当我想向自定义 RecyclerView 添加消息时,整个消息都会受到影响并且它们会发生变化(特别是在添加图像时)。

我尝试执行notifyItemChanged(position),但情况变得更糟。 这是我的适配器代码:

 @NonNull
@Override
public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, null, false);
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

    layoutView.setLayoutParams(lp);

    MessageViewHolder rcv = new MessageViewHolder(layoutView);
    return rcv;
}

@Override
public void onBindViewHolder(@NonNull final MessageViewHolder holder, final int position) {


    holder.mMessage.setText(messageList.get(position).getMessage());
    holder.mSender.setText(messageList.get(position).getSenderId());
    Picasso.Builder builder = new Picasso.Builder(context);
    builder.downloader(new OkHttp3Downloader(context));
    builder.build().load(messageList.get(position).getProfilePic())
            .placeholder((R.drawable.image))
            .into(holder.imgprofile);

    if(!messageList.get(holder.getAdapterPosition()).getMediaUrlList().isEmpty()){
        holder.mViewMedia.setVisibility(View.VISIBLE);
        Picasso.Builder builder2 = new Picasso.Builder(context);
        builder2.downloader(new OkHttp3Downloader(context));
        builder2.build().load(messageList.get(holder.getAdapterPosition()).getMediaUrlList().get(0))
                .placeholder((R.drawable.ic_launcher_background))
                .error(R.drawable.ic_launcher_background)
                .into(holder.mViewMedia);

    }


    holder.mViewMedia.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new ImageViewer.Builder(v.getContext(), messageList.get(holder.getAdapterPosition()).getMediaUrlList())
                    .setStartPosition(0)
                    .show();
        }
    });

}

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





class MessageViewHolder extends RecyclerView.ViewHolder{
   //defining textviews and stuff..
    }
}

如果有人有任何想法,我会很高兴。

最佳答案

我认为 Android 支持库中存在名为 DiffUtil 的实用程序类。这是一个检测两个列表之间变化的回调。

你可以引用一些教程:https://www.journaldev.com/20873/android-recyclerview-diffutilhttps://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00

关于java - RecyclerView 更新而不刷新适配器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61696396/

相关文章:

java - Android:Google Place Autocomplete API 给出“此 ip、站点或移动应用程序未被授权使用此 API key

java - 显示 JFrame 或 JDialog (Swing)

android - 为什么空指针异常?相机应用

java - 在android中访问从activity到fragment的imageview

android - 如何访问从可穿戴 tizen 应用程序发送到 android 应用程序的字符串

android - RecyclerView 在 ConstraintLayout 中表现异常

java - sftp 服务器中的连接被拒绝

java - 为什么 Spring Boot 要求我定义 'entityManagerFactory' bean?

java - RecyclerView中的Android居中项目

android - 如何保存和恢复 RecyclerView 滚动的确切位置?