0
我創建這個應用程序,我有一個RecyclerView與一些圖片。如果用戶想要移除其中的一個,則他長時間按下圖片,並且用「X」按鈕在圖片的頂部顯示灰色透明佈局以移除圖片。當用戶按下「X」時會顯示一個對話框,詢問是否接受確認,然後圖片被刪除。我不明白爲什麼當我接受刪除圖片時收到「ConcurrentModificationException」。標記的行是「return data.size();」 on方法「getItemCount()」,我沒有從任何其他方面訪問「數據」,我只能看到「getItemCount」被調用了很多次。請注意,我刪除了不必要的功能和班級成員。Android - 從RecyclerView中刪除元素拋出ConcurrentModificationException
public class RecyclerViewAdAdapter extends RecyclerView.Adapter<RecyclerViewAdAdapter.ViewHolder> {
private Context context;
private List<String> data;
public RecyclerViewAdAdapter(Context context, List<String> items) {
this.context = context;
this.data = items;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.grid_create_ad_item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
String imagePath = data.get(position);
setImageBitmap(imagePath, holder.itemImage);
holder.removeItemButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.confirm_remove_picture);
builder.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
removeItem(holder.getAdapterPosition());
}
});
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.setCancelable(true);
dialog.show();
}
});
}
@Override
public int getItemCount() {
return data.size();
}
private void removeItem(int position) {
data.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, data.size());
}
private void setImageBitmap(String item, ImageView imageView) {
/***/
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView itemImage;
RelativeLayout grayTopLayout;
ImageView removeItemButton;
ViewHolder(View itemView) {
super(itemView);
itemImage = (ImageView) itemView.findViewById(R.id.item_image);
grayTopLayout = (RelativeLayout) itemView.findViewById(R.id.grayTopLayout);
removeItemButton = (ImageView) itemView.findViewById(R.id.removeItemButton);
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
switch (grayTopLayout.getVisibility()) {
case View.VISIBLE:
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
grayTopLayout.setVisibility(View.GONE);
break;
case View.GONE:
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) v.getLayoutParams();
params.width = itemImage.getWidth();
v.setLayoutParams(params);
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
grayTopLayout.setVisibility(View.VISIBLE);
break;
case View.INVISIBLE:
break;
}
return false;
}
});
}
}
}
沒有工作:( – Ramin
@Ramin你shoure沒有其他人訪問您的陣列? –
@Ramin看到我的編輯 –