2017-09-20 1 views
1

Suppression de l'élément dans RecyclerView cause de vue se chevauchent comme cette vidéo Linkvue Overlap après suppression de l'article RecyclerView

fragment_feed.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="none" /> 

adaptateur

holder.setIsRecyclable(false); 
    ((PostViewHolder) holder).mUsername.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       deleteItem(holder.getAdapterPosition()); 
      } 
     }); 

void deleteItem(int index) { 
    postList.remove(index); 
    notifyItemRemoved(index); 

} 

Lorsque je change notifyItemRemoved(index); à notifyDataSetChanged(); semblent avoir résolu mon problème, mais c'est la cause de supprimer l'animation détruite. J'essaie de trouver une solution pour résoudre ce problème, mais il semble que personne n'a le même problème avec moi. Merci pour la réponse

EDIT

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
    holder.setIsRecyclable(false); 
    if (holder instanceof PostViewHolder) { 
     Post post = (Post) postList.get(position); 
     String type = post.getTypePost(); 

     // Inflate Layout // 
     LayoutInflater inflater = LayoutInflater.from(mContext); 


     ((PostViewHolder) holder).mUsername.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       deleteItem(holder.getAdapterPosition()); 
      } 
     }); 

     ((PostViewHolder) holder).mUsername.setText(post.getOwnerPost()); 


    } else if (holder instanceof HeaderViewHolder) { 

    } else{ 
     ((ProgressViewHolder) holder).progressBar.setIndeterminate(true); 
    } 
} 
+0

Essayez de supprimer holder.setIsRecyclable (false); ligne. –

+0

@BharathKumar Il semble que ce soit du travail mais je m'inquiétais de la mauvaise position dans recyclerView. Merci: D – LIPONEF

Répondre

2

Ajouter le clickListener dans onBindViewHolder et modifier le code comme suit

PostViewHolder postViewHolder=(PostViewHolder) holder; 
postViewHolder.mUsername.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view) { 
      deleteItem(holder.getAdapterPosition()); 
     } 
    }); 

void deleteItem(int index) { 
    postList.remove(index); 
    notifyItemRemoved(index); 
    notifyItemRangeChanged(position, yourDataSet.size()); 
} 
holder.setIsRecyclable(true); 

Lors de la suppression enlever toujours élément de datalist puis notifyAdapter. Utilisez également holder.setIsRecyclable (false) lorsque chaque donnée de viewholder a un état de données différent.

+0

Il semble être résolu lorsque je supprime ou modifie setIsRecyclable (false) à (true). Merci XD – LIPONEF

+0

SetIsRecyclable est utilisé uniquement lorsque vous ne voulez pas recycler les vues de recycleur..Alors vous avez eu des erreurs .. toujours heureux de l'entendre résolu :) – Anonymous

0

Essayez cette

void deleteItem(int index) { 
    postList.remove(index); 
    notifyItemRemoved(index); 

    //notify items from index to end 
    notifyItemRangeChanged(index, getItemCount() - index); 
} 
+0

Non résolu. Voici le résultat [link] (https://youtu.be/06L3azZE3Ys) – LIPONEF

+0

montrez votre méthode 'onBindViewHolder'. –

+0

vérifier ma mise à jour – LIPONEF

0

sur votre niveau d'activité, où vous liez votre adaptateur avec le recycleur View, vous devez effacer votre liste avant d'appeler notifyDataSetChanged().

Utilisez la ligne de code suivante

adapter.clearData(); 

et

adapter.notifyDataSetChanged(); 

Et dans la méthode deleteItem(): -

void deleteItem(int index) { 
    postList.remove(index); 
    notifyItemRemoved(index); 
    notifyItemRangeChanged(index, getItemCount() - index); 
} 

Pour plus d'aide, vous pouvez suivre ce lien: - https://github.com/kanytu/android-parallax-recyclerview/issues/13