我有一个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);
那么我的代码出了什么问题
Onclick 事件发生变化,但在滚动离开该 View 并再次返回后 OnBind 继续使用与旧 View 相同的数据重新创建 View 。 (重要的是更新 position 的数组数据或有一个显示数据已更新的标志)
我的 View 带有可绘制项目,我从不在绑定(bind)时更新它,所以单击时,那些看起来与单击项目位于同一 UI 的项目也会反射(reflect)更改。 (混合了动态 View 元素和静态 View 元素的概念)
如果有人的数据来自 SQLite 怎么办?
考虑先将数据放入数组中。
Onclick 在后台更新您的 SQLite 数据并更新 View 以反射(reflect)该数据(不要浪费内存再次从 SQLite 重绘整个 recyclerview)
感谢所有贡献者。
关于java - 更新 recyclerview 中的特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319862/