【问题标题】:Item position not updating in onBind method项目位置未在 onBind 方法中更新
【发布时间】:2020-09-12 07:11:10
【问题描述】:

我正在实现接口来检测何时在回收器视图中单击视图。单击按钮时,我正在删除该项目。单击一次按钮时,它可以正常工作。但是当我第二次点击它时,它会删除它旁边的视图。

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            optionsClickEvent.onDeleteClicked(position, imagePath);
            showToast(String.valueOf(position));
        }
    });

}

以上代码在 onBind 中执行。接下来我要删除:

@Override
public void onDeleteClicked(int position, ArrayList<String> filePath) {
    filePath.remove(position);
    imageAdapter.notifyItemRemoved(position);
}

这一次完美。但是项目没有更新。当我第二次单击删除按钮时,该项目在位置+1处被删除。

【问题讨论】:

  • 位置是布局位置还是适配器位置?尝试使用适配器位置
  • 我不知道。请参阅上面的代码。我已经改了。

标签: android android-recyclerview android-adapter


【解决方案1】:

用户 holder.getAdapterPosition() 代替 onClick 中的布局位置

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        optionsClickEvent.onDeleteClicked(holder.getAdapterPosition(), imagePath);
        showToast(String.valueOf(position));
    }
});

}

【讨论】:

  • 谢谢。为什么 holder.getAdapterPosition() 在方法 showToast() 中使用时会给出 -1?
猜你喜欢
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多