java - 更新 recyclerview 中的特定项目

标签 java android android-recyclerview android-adapter

我有一个RecyclerView 和适配器

public class AdapterToUpdateOk extends RecyclerView.Adapter<AdapterToUpdateOk.VersionViewHolder> {
String[] desc;
Context context;
LayoutInflater inflater;

AdapterToUpdateOk adapter;

public AdapterToUpdateOk(Context context,String [] desc) {
    this.context = context;
    this.desc= desc;
    inflater = LayoutInflater.from(context);
}

@Override
public VersionViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = inflater.inflate(R.layout.inflater_sugessted_friends, viewGroup, false);
    return new VersionViewHolder(view);
}

@Override
public void onBindViewHolder(final VersionViewHolder versionViewHolder, final int i) {
    final VersionViewHolder v = versionViewHolder;
    versionViewHolder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            versionViewHolder.imageView.setImageResource(R.drawable.ic_ok);
        }
    });

}

@Override
public int getItemCount() {
    return desc.length;
}

class VersionViewHolder extends RecyclerView.ViewHolder {
    Button button;
    ImageView imageView;;
    public VersionViewHolder(final View itemView) {
        super(itemView);
        button= itemView.findViewById(R.id.button);
        imageView = itemView.findViewById(R.id.imageview);
    }

}

目前它可以工作,但它会影响其他未点击的部分

最佳答案

回答:(更新回收站 View 中的特定项目)

notifyItemChanged(Adapterposition),工作正常,这里是一些描述

notifyItemChanged 方法告诉 OnBind 要在该位置重绘项目, 在调用此方法之前,您必须考虑更新该位置的 arrayData 以反射(reflect)新的更改

      versionViewHolder.ClickedView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ArrayDataAt[position] = " New Data to replace Old one ";
            notifyItemChanged(Adapterposition);
        }
    });

如果你想改变一些不是来自数组数据集的东西怎么办?

这与我的情况完全一样,(并且与更新背景颜色、文本颜色等相同。

您可以创建一个标识符(只是一个 boolean 数组),它包含您的行的状态,假设所有行的 boolean 值都是假的,当在该位置单击更新 booleanArray 为真时,记得告诉bind 考虑 true 元素不同颜色,不同字体等特定操作,最后通知 notifyItemChanged(Adapterposition);

那么我的代码出了什么问题

  1. Onclick 事件发生变化,但在滚动离开该 View 并再次返回后 OnBind 继续使用与旧 View 相同的数据重新创建 View 。 (重要的是更新 position 的数组数据或有一个显示数据已更新的标志)

  2. 我的 View 带有可绘制项目,我从不在绑定(bind)时更新它,所以单击时,那些看起来与单击项目位于同一 UI 的项目也会反射(reflect)更改。 (混合了动态 View 元素和静态 View 元素的概念)

如果有人的数据来自 SQLite 怎么办?

考虑先将数据放入数组中。

Onclick 在后台更新您的 SQLite 数据并更新 View 以反射(reflect)该数据(不要浪费内存再次从 SQLite 重绘整个 recyclerview)

感谢所有贡献者。

关于java - 更新 recyclerview 中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319862/

相关文章:

java - 如何在 MongoClientSettings 中设置每个主机的连接设置?

Android - 如何设置 ListView 的最大大小

安卓 : RecyclerView row Visibility not working properly

java - Glide 用加载的图像部分覆盖屏幕

java - 使用 JRuby 或 Python 调用一些第三方 Java 库 - 架构问题

javascript - 所有选项卡内容均在页面加载时出现。我只想显示 Activity 选项卡数据

java.io.FileNotFoundException :/storage/emulated/0/Notes/fact50Result. txt:打开失败 ENOENT(没有这样的文件或目录)

java - 服务一结束,通知就会消失

java - 单击时旋转 ImageView 属于 RecyclerView

java - Jackson 反序列化为子元素列表