2
私のデータを表示するrecyclerview
があります。私のアダプタクラスでは、onBindViewHolder()
の中に、クリック時に行を削除するボタンのリスナーを作成しました。最初はうまくいきますが、アイテムを削除しようとすると、リストのサイズが変更されていない場合と同じ位置値になります。onBindViewHolder()の位置がアイテムの削除によって更新されない
たとえば、私は4つのアイテムリストを持っています。 3番目のアイテム(インデックス2)を削除します。 4番目のアイテムは3番目のスロットに入り、リストのサイズは3になります。3番目のアイテムを削除しようとすると、アイテムの位置が更新されておらずインデックスが3のままであるため、IndexOutOfBoundsException
になります。
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();
}
});
}
}