Android onBindViewHolder()上的位置不';无法使用项目删除更新
我有一个Android onBindViewHolder()上的位置不';无法使用项目删除更新,android,android-viewholder,Android,Android Viewholder,我有一个recyclerview显示我的数据。在我的适配器类中,在onBindViewHolder()中,我为一个按钮创建了一个侦听器,该按钮在单击时删除一行。第一次很好,但是如果我尝试删除一个项目,位置值就和列表大小没有改变一样 例如,我有一个4项清单。我删除了第三项(索引为2)。第四项进入第三个插槽,列表大小变为3。如果我尝试删除第三个项目,我会得到一个索引AutofBoundsException,因为项目位置尚未更新,其索引仍然为3,而大小为3 以下是我的onBindViewHolder(
recyclerview
显示我的数据。在我的适配器类中,在onBindViewHolder()
中,我为一个按钮创建了一个侦听器,该按钮在单击时删除一行。第一次很好,但是如果我尝试删除一个项目,位置值就和列表大小没有改变一样
例如,我有一个4项清单。我删除了第三项(索引为2)。第四项进入第三个插槽,列表大小变为3。如果我尝试删除第三个项目,我会得到一个索引AutofBoundsException
,因为项目位置尚未更新,其索引仍然为3,而大小为3
以下是我的onBindViewHolder()
方法的部分代码:
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
ItemRegistered item = registeredList.get(position);
if (holder.getItemViewType() == 0) {
final RegisteredViewHolder registeredViewHolder = (RegisteredViewHolder) holder;
registeredViewHolder.course.setText(item.getCourse());
registeredViewHolder.btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
if (mButtonClickListener != null) {
Log.d("i", Integer.toString(position));
Log.d("list size:", Integer.toString(registeredList.size()));
final String title = registeredList.get(position).getCourse();
mButtonClickListener.onButtonClicked(title);
}
registeredList.remove(holder.getAdapterPosition());
notifyItemRemoved(position);
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(registeredViewHolder.course.getContext());
builder.setMessage("Jeni të sigurtë që doni të çregjistroheni?").setPositiveButton("Po", dialogClickListener)
.setNegativeButton("Jo", dialogClickListener).show();
}
});
}
}
尝试从列表中删除项,然后通知适配器 那就是替换这条线
registeredList.remove(holder.getAdapterPosition());
notifyItemRemoved(position);
使用<代码>移除(位置)代码>
现在只需创建一个方法并添加逻辑
public void remove(int position){
registeredList.remove(position);
notifyItemRemoved(position);
// to animate the list deletion
notifyItemRangeChanged(position, getItemCount());
}
希望有帮助:)