9

Geri dönüştürücü görünümü içinde bir satır oluşturdum ve içinde iki satır veya daha fazla şişirdiğimi ancak kaydırma yaptığımda öğeleri yeniden kullanmaya başladım. Görüntüyü geri dönüşüme dönüştürmek veya dinamik olarak kaldırmak için hiçbir yere gitmiyorum Bir özet akışına ve yorumlarına ihtiyacım var. Yorumlar için, düzenleri getCommentInflaterView yönteminin oluşturulduğu feed'lerin altında görüntülemek için şişirmem gerekiyor.Geridönüşümcünün kaydırılması sırasında öğelerin çoğaltılması nasıl engellenir?

Ancak getCommentInflaterView() kullanılarak oluşturulan görünüm çoğaltılır. MyAdapterClass: onBindViewHolder yöntemin sonunda

public class AllFeedsAdapter extends 
     RecyclerView.Adapter<AllFeedsAdapter.ViewHolder> { 

    ArrayList<Data> arrayListAllFeedsData; 
    Comment objComment; 


    Context context; 

    public AllFeedsAdapter(Context context, ArrayList<Data> data) { 
     this.context = context; 
     arrayListAllFeedsData = new ArrayList<>(); 
     arrayListAllFeedsData = data; 
    } 


    @Override 
    public AllFeedsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context = parent.getContext(); 
     LayoutInflater inflater = LayoutInflater.from(context); 

     // Inflate the custom layout 
     View post_row_view = inflater.inflate(R.layout.row_teacher_post, parent, false); 

     // Return a new holder instance 
     ViewHolder viewHolder = new ViewHolder(post_row_view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(AllFeedsAdapter.ViewHolder holder, int position) { 

     holder.txtUsernamePostCreator.setText(arrayListAllFeedsData.get(position).getFull_name()); 
     holder.txtPostContent.setText(arrayListAllFeedsData.get(position).getFeed_text()); 
     holder.txtPostLikeCounter.setText(arrayListAllFeedsData.get(position).getTotal_like()); 
     holder.txtPostCommentsCounter.setText(arrayListAllFeedsData.get(position).getTotal_comment()); 

     if (arrayListAllFeedsData.get(position).getComment().size() > 0) { 


      if (arrayListAllFeedsData.get(position).getComment().size() > 2) { 
       for (int i = 0; i < 2; i++) { 

        objComment = arrayListAllFeedsData.get(position).getComment().get(i); 

        if (getCommentInflaterView(objComment) == null) { 
         holder.llCommentRowInflater.addView(getCommentInflaterView(objComment)); 
        } else { 
         holder.llCommentRowInflater.removeAllViews(); 
        } 


       } 
      } else { 
       for (int i = 0; i < arrayListAllFeedsData.get(position).getComment().size(); i++) { 

        objComment = arrayListAllFeedsData.get(position).getComment().get(i); 
        if (getCommentInflaterView(objComment) == null) { 
         holder.llCommentRowInflater.addView(getCommentInflaterView(objComment)); 

        } else { 
         holder.llCommentRowInflater.removeAllViews(); 
        } 

       } 
      } 

     } 


    } 

    private View getCommentInflaterView(Comment commentData) { 

     LayoutInflater layoutInflater = LayoutInflater.from(context); 
     View v = layoutInflater.inflate(R.layout.post_comments_list_item, null, false); 

     TextView txtCommenterUsername = (TextView) v.findViewById(R.id.txt_username_commenter); 
     TextView txtCommenterComment = (TextView) v.findViewById(R.id.txt_comments_from_commenter); 
     TextView txtCommentDuration = (TextView) v.findViewById(R.id.txt_comment_duration); 


     txtCommenterUsername.setText(commentData.getUsername()); 
     txtCommenterComment.setText(commentData.getComment()); 
     txtCommentDuration.setText(commentData.getCommentBy()); 


     return v; 

    } 

    @Override 
    public int getItemCount() { 
     return arrayListAllFeedsData.size(); 
    } 

    /** 
    * USed to create static class for all the view if listitem child 
    */ 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
     // Your holder should contain a member variable 
     // for any view that will be set as you render a row 

     public LinearLayout llParentTeacherPost, llCommentRowInflater; 

     // We also create a constructor that accepts the entire item row 
     // and does the view lookups to find each subview 
     public ViewHolder(View itemView) { 
      // Stores the itemView in a public final member variable that can be used 
      // to access the context from any ViewHolder instance. 
      super(itemView); 
      llParentTeacherPost = (LinearLayout) itemView.findViewById(R.id.ll_parent_teacher_post); 
      llCommentRowInflater = (LinearLayout) itemView.findViewById(R.id.ll_comment_row_inflater); 

      imgDpPostCreator = (ImageView) itemView.findViewById(R.id.img_dp_post_creator); 
      txtUsernamePostCreator = (TextView) 
     } 


    } 
} 

cevap

-2

, şunlardır:

@Override 
public long getItemId(int position){ 
// return specific item's id here 
} 
+0

Çözüm çalışmıyor –

3

, sen yöntemini geçersiz kılmak gerekir .

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 
+1

Lütfen ne istediğinizi belirtin? http://stackoverflow.com/help/how-to-ask – selva

57

Geçersiz kıl adaptörü bu iki metodlar: holder.itemView.setTag(arrayListAllFeedsData.get(position)); adaptör sınıfına AllFeedsAdapter

+2

Soru sorma ve denemeden yaklaşık 1 saat sonra http://stackoverflow.com/help/how-to-ask adresine soru sorulabilir. Teşekkür ederim çok – Alex

+3

Bu işe yarıyor! Ama nedenini bilmiyorum. Açıklayabilir misiniz lütfen? –

+0

Çok teşekkür ederim. Bu sorunun nedenini merakla beklediğini düşünmemiştim. – Syn3sthete

1

Bu sorunu da yaşıyordum. GetItemId ve getItemViewType eklentilerinin eklendiğini, geri dönüşümlü öğelerdeki resimlerin çoğaltılmasının, kaydırırken eklediğini onaylayabilirim.

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

Bunu bir yorum olarak bıraktım, ancak 5'ten az geri bildirim aldım.

İlgili konular