[英]How do I notify onBindViewHolder when an item is removed from the recycler view?
So the scenario of my problem is I want to delete one row from the RecyclerView
but it give me the error 所以我的问题的情况是我想从
RecyclerView
删除一行,但它给我错误
Inconsistency detected.
检测到不一致。 Invalid view holder adapter
无效的视图支架适配器
My code snippet are: 我的代码段是:
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.textViewTitle.setText(imageGalleryList.get(position).title);
holder.textViewTitleDesc.setText(imageGalleryList.get(position).comment);
holder.textViewImageCreateInfo.setText(imageGalleryList.get(position).createUserId + " "/*+ UtilityOfActivity.convertLongDateToShortDateTime(getJCImageBySerialResponse[position].createDate)*/);
// imageLoader.displayImage(getJCImageBySerialResponse[position].imageUrl, holder.uploadedImage);
holder.btnDeleteImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imagePosition = position;
//calling the custom dialog
CustomDialogTwoButtons.showDialog(context, Constant.calledByDataSheetImageGallery,
Constant.calledBy_delete_image_gallery,
Constant.Confirm_Image_Deletion, Constant.Confirm_Image_Deletion_Message,
Constant.DialogPositiveButton, Constant.DialogNegativeButton);
}
});
// override interface method
public void dialogItemClick(Context context, String calledBy) {
Toast.makeText(context, " " + imagePosition, Toast.LENGTH_SHORT).show();
removeItemFromView(imagePosition);
}
//method to remove item from the recycler view row
public void removeItemFromView(int position) {
this.imageGalleryList.remove(position);
notifyItemChanged(position);
notifyItemRemoved(position);
notifyDataSetChanged();
//removes the row
}
And this is the code of my dialog: 这是我的对话框的代码:
public class CustomDialogTwoButtons extends Activity
{
public static void showDialog(final Context context, final String calledByFragment,
final String calledBy,
String title, String message,
String positiveButton, String negativeButton) {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(R.layout.custom_dialog_two_buttons);
TextView txtTitle = (TextView) dialog.findViewById(R.id.txtTitle);
TextView txtMessage = (TextView) dialog.findViewById(R.id.txtMessage);
Button btnPositive = (Button) dialog.findViewById(R.id.btnPositive);
Button btnNegative = (Button) dialog.findViewById(R.id.btnNegative);
txtTitle.setText(title);
txtMessage.setText(message);
btnPositive.setText(positiveButton);
btnNegative.setText(negativeButton);
btnPositive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Positive ", Toast.LENGTH_SHORT).show();
CustomDialogInterface reference = null;
if (calledByFragment.equalsIgnoreCase(Constant.calledByDataSheetOrderInfo)) {
if (calledBy.equalsIgnoreCase(Constant.DELETE_CUST_VOICE)) {
reference = new DataSheetOrderInfo();
}
else if (calledBy.equalsIgnoreCase(Constant.EDIT_CUST_VOICE)) {
reference = new DialogFragmentAddEditDeleteCustVoice();
} else if (calledBy.equalsIgnoreCase(Constant.ADD_CUST_VOICE)) {
reference = new DialogFragmentAddEditDeleteCustVoice();
}
}
else if(calledByFragment.equalsIgnoreCase(Constant.calledByCreateRepairOrderFragment)) {
if (calledBy.equalsIgnoreCase(Constant.DELETE_CUST_VOICE)) {
reference = new FragmentCreateRepairOrder();
} else if (calledBy.equalsIgnoreCase(Constant.EDIT_CUST_VOICE)) {
reference = new CustomDialogEditCustVoice();
} else if (calledBy.equalsIgnoreCase(Constant.ADD_CUST_VOICE)) {
reference = new FragmentCreateRepairOrder();
}
}
else if(calledByFragment.equalsIgnoreCase(Constant.calledByDataSheetImageGallery)) {
if (calledBy.equalsIgnoreCase(Constant.calledBy_delete_image_gallery)) {
reference = (CustomDialogInterface) new ImageUploadAdapter();
}
}
reference.dialogItemClick(context, calledBy);
dialog.cancel();
}
});
btnNegative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "Negative ", Toast.LENGTH_SHORT).show();
dialog.cancel();
}
});
dialog.show();
}
public interface CustomDialogInterface {
void dialogItemClick(Context context, String calledBy);
}
}
So the problem is when I called removeItemFromView
from my Interface Implemented method It does not update onBindViewHolder
want to know how to notify onBindViewHolder
that an item is removed. 所以问题是当我从接口实现的方法中调用
removeItemFromView
,它不更新onBindViewHolder
想知道如何通知onBindViewHolder
某项已被删除。
try this code in your removeItemFromView
在您的
removeItemFromView
尝试此代码
public void removeItemFromView(int position) {
try{
this.imageGalleryList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, imageGalleryList.size())
//removes the row
} catch (Exception e){
notifyDataSetChanged();
e.printStackTrace();
}
}
First the getItemCount should return the size of the list. 首先,getItemCount应该返回列表的大小。 Here , imageGalleryList.
在这里,imageGalleryList。
Then just call notifyItemRemoved(position) alone. 然后只需单独调用notifyItemRemoved(position)。
public void removeItemFromView(int position) {
this.imageGalleryList.remove(position);
notifyItemRemoved(position);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.