Ainsi, le scénario de mon problème est que je veux supprimer une ligne de la RecyclerView
mais il me donne l'erreurComment informer onBindViewHolder lorsqu'un élément est supprimé de la vue recycleur?
Incohérence détectée. adaptateur titulaire de vue non valide
Mon extrait de code sont:
@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
}
Et voici le code de ma boîte de dialogue:
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);
}
}
Le problème est quand j'ai appelé removeItemFromView
de mon interface Mis en œuvre méthode Il ne met pas à jour onBindViewHolder
veut savoir comment notifier onBindViewHolder
qu'un élément est supprimé.
position passe à showDialog et dialogItemClick ajouter troisième paramètre que la position – Pavya
ne peut pas faire Pravin parce que je me sers de mon dialogue plus d'un endroit dans mon application en appelant même méthode – Champandorid
essayez de définir onClick listnerers à l'intérieur de ViewHolder et obtenir la disposition comme ceci int position = getLayoutPosition(); ' –