2017-01-24 1 views
0

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é.

+0

position passe à showDialog et dialogItemClick ajouter troisième paramètre que la position – Pavya

+0

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

+0

essayez de définir onClick listnerers à l'intérieur de ViewHolder et obtenir la disposition comme ceci int position = getLayoutPosition(); ' –

Répondre

0

essayer ce code dans votre 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(); 
    } 
} 
+0

même problème, problème est lorsque removeItemFromView (position int) terminer son exécution, il revient sur dialogItemClick et n'a rien notifié à onBlindViewHolder. – Champandorid

+0

avez-vous attrapé une exception? – rafsanahmad007

+0

même java.lang.IndexOutOfBoundsException: incohérence détectée. La position de l'article 5 n'est pas valide (offset: 5) .state: 6 – Champandorid