java - getAdapterPosition 有时会返回错误的值
问题描述
我正在尝试为 RecyclerView 创建一个适配器,其中每个视图都包含一些信息和两个按钮,一个用于删除视图,一个用于更新信息。我将侦听器设置如下,并且我可以让操作按我的意愿工作(即removeRecepie
andchooseNewRandomRecepie
做我想让他们做的事情)。
但是,有时,getAdapterPosition 看似随机地发送了错误的位置。因此删除或更新发生在不正确的视图上(我已经测试了 的输出getAdapterPosition
,并且输出与更改的视图一致,即错误的视图)。我写了setListener
如下:
void setListener(View view){
Button removeButton = view.findViewById(R.id.remove_button);
removeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeRecepie(getAdapterPosition());
}
});
Button newRandomButton = view.findViewById(R.id.new_random);
newRandomButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chooseNewRandomRecepie(getAdapterPosition());
}
});
}
我将非常感谢任何帮助或提供帮助的指针。如果我可以提供任何进一步的信息来帮助您帮助我,请告诉我:)
解决方案
你应该使用onBindViewHolder
.
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.removeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeRecepie(position);
}
});
holder.removeButton.SetOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chooseNewRandomRecepie(position);
}
});
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Button removeButton;
Button newRandomButton;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
removeButton = itemView.findViewById(R.id.removebutton);
newRandomButton = itemView.findViewById(R.id.newRandomButton);
}
}
推荐阅读
- javascript - 如何将 JS 数组传递给 PHP
- python - Scrapy - 将抓取的数据返回给函数(Python)
- arrays - 找出矩阵中权重最小和权重最大的路径
- html - 删除 HTML Textarea 调整大小图标
- vue.js - 如何使 Vue 属性与 Vue 中的另一个属性有条件?
- c++ - Ubuntu上的opencv dnn模块问题
- geometry - 计算移动圆接触矩形时的位置
- laravel - 获取表 laravel 中选定行的 id
- spring-boot - 点燃 Spring Data 支持实现和 Spring Data REST 支持
- haskell - 为什么我找不到 NotQuiteCofree not-quite-comonad 的任何违法行为?