[英]How do I call getString() inside the onBindViewHolder() method of a recycler view?
[英]How do I notify onBindViewHolder when an item is removed from the recycler view?
所以我的问题的情况是我想从RecyclerView
删除一行,但它给我错误
检测到不一致。 无效的视图支架适配器
我的代码段是:
@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
}
这是我的对话框的代码:
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);
}
}
所以问题是当我从接口实现的方法中调用removeItemFromView
,它不更新onBindViewHolder
想知道如何通知onBindViewHolder
某项已被删除。
在您的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();
}
}
首先,getItemCount应该返回列表的大小。 在这里,imageGalleryList。
然后只需单独调用notifyItemRemoved(position)。
public void removeItemFromView(int position) {
this.imageGalleryList.remove(position);
notifyItemRemoved(position);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.