gpt4 book ai didi

java - 更新 recyclerview 中的特定项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:34 27 4
gpt4 key购买 nike

我有一个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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com