java - 在我的适配器中,我无法更改 onClickListener 中的定义值
问题描述
在我的适配器中,我遇到的问题是,如果我在 onClickListener 之前定义了一个字符串,我以后无法在 onClickListener 中更改它。我可以将它设置为不可见,这很完美,但是我无法更改它。
我希望如果用户单击图像,第二个图像应该替换第一个图像,但是我不能在图像视图中更改图像,我建议这与我无法更改的字符串的问题相同。
谢谢你的帮助!
private List<cards> listItems;
private Context context;
public arrayAdapter(List<cards> listItems, Context context) {
this.listItems = listItems;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
return new ViewHolder(v);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final cards currentItem = listItems.get(i);
viewHolder.name.setText(currentItem.getName());
viewHolder.comment.setText(currentItem.getComment());
Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);
viewHolder.name.setText("this work"); // here it works
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Try this
currentItem.setName("New text");
notifyDataSetChanged();
//viewHolder.name.setText("New text"); // this does not work
// viewHolder.name.setVisibility(View.INVISIBLE); this does work
Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image); // does not work
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView name, comment, howMany;
public ImageView image;
/**
* @param itemView
*/
ViewHolder(@NonNull View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
comment = (TextView) itemView.findViewById(R.id.commentText);
}
}
}
解决方案
你应该打电话notifyItemChanged
到相应的位置。
@Override
public void onBindViewHolder(final ViewHolder viewHolder, int position) {
final cards currentItem = listItems.get(i);
viewHolder.name.setText(currentItem.getName());
viewHolder.comment.setText(currentItem.getComment());
Picasso.get().load(currentItem.getProfileImageUrl()).into(viewHolder.image);
viewHolder.name.setText("this work"); // here it works
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.name.setText("New text"); // this does not work
// viewHolder.name.setVisibility(View.INVISIBLE); this does work
Picasso.get().load(currentItem.getProfileImageUrl2()).into(viewHolder.image); // does not work
notifyItemChanged(position);
}
});
}
推荐阅读
- javascript - 如何使用 url API 从输入中搜索图像,使用 javascript 并显示到 html 页面?
- html - VBA 宏只能部分运行一次
- javascript - Jasmine 等待进行异步调用以解决承诺的私有函数
- maven - DAML sdk 0.12.24 mvn 编译在执行 daml build 后失败
- php - 从 SoapVar 转储 XML 字符串
- c - tf.keras.backend.dot 有什么作用?
- typo3 - TYPO3:调用未定义的方法
- java - 使用 Java 从 EC2 中的 S3 读取 CSV 文件
- flutter - HttpException:在收到完整标头之前连接已关闭
- c++ - 如何知道当前正在移动哪些 QGraphicsItems?