Проблема с перетасовкой данных при прокрутке в неоднородном Recyclerview - PullRequest
0 голосов
/ 24 апреля 2020

Данные перетасовываются, когда представления перерабатываются, эта проблема обычно устраняется путем переопределения двух методов. Но в моем случае у меня есть несколько макетов в представлении переработчика. Я не могу найти решение нигде. В настоящее время для временного исправления. Я использовал holder.setIsRecyclable (false); но это делает просмотрщик бесполезным. Если кто-нибудь знает, как решить эту проблему, это будет здорово. Спасибо.

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

@Override
public int getItemViewType(int position) {
    return position;
public class DoubtCommentsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
   private ArrayList<DoubtBaseModel.CommentBaseModel> dataset;
   private Context mContext;
   private int finalType;
   private int TYPE_TEACHER = 0,TYPE_PARENT = 2;

   public DoubtCommentsAdapter(ArrayList<DoubtBaseModel.CommentBaseModel> dataset, Context mContext) {
       this.dataset = dataset;
       this.mContext = mContext;
   }



   @NonNull
   @Override
   public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       LayoutInflater layoutInflater = LayoutInflater.from(mContext);
       View view;
       if (viewType == TYPE_TEACHER) { // for call layout
           view = layoutInflater.inflate(R.layout.teacher_comment_item, parent, false);
           return new DoubtCommentTeacherViewholder(view);
       } else { // for email layout
           view =layoutInflater.inflate(R.layout.parent_comment_item, parent, false);
           return new DoubtCommentViewholder(view);
       }
   }

   @Override
   public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        //holder.setIsRecyclable(false);
       final DoubtBaseModel.CommentBaseModel commentBaseModel = dataset.get(position);
       if (!Utils.checkNullOrblank(commentBaseModel.getStudentId())) {
           final  DoubtCommentViewholder commentViewholder = (DoubtCommentViewholder)holder;
            if (!Utils.checkNullOrblank(commentBaseModel.getCommentText()))
           commentViewholder.textComment.setText(commentBaseModel.getCommentText());
           else commentViewholder.textComment.setVisibility(View.GONE);
           if (!Utils.checkNullOrblank(commentBaseModel.getCommentFile())&&!Utils.checkNullOrblank(commentBaseModel.getContentType())) {
               if (commentBaseModel.getContentType().startsWith("image"))
               {    Picasso.get().load(commentBaseModel.getCommentFile()).resize(300,300).placeholder(R.drawable.file_ic).error(R.drawable.file_ic).into(commentViewholder.previewImage);
                   commentViewholder.previewImage.setBackground(mContext.getResources().getDrawable(R.drawable.image_preview_background));
               }else {
                   commentViewholder.previewImage.setScaleType(ImageView.ScaleType.CENTER);
                   //commentViewholder.previewImage.setBackgroundColor(mContext.getResources().getColor(R.color.white));

               }
               commentViewholder.previewImage.setVisibility(View.VISIBLE);
               commentViewholder.previewImage.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                       openFile(commentBaseModel);
                   }
               });

           }
       }
       else  {
           final  DoubtCommentTeacherViewholder commentViewholder = (DoubtCommentTeacherViewholder)holder;
           if (!Utils.checkNullOrblank(commentBaseModel.getCommentText()))
               commentViewholder.textComment.setText(commentBaseModel.getCommentText());
           else commentViewholder.textComment.setVisibility(View.GONE);
           if (!Utils.checkNullOrblank(commentBaseModel.getCommentFile())&&!Utils.checkNullOrblank(commentBaseModel.getContentType())) {
               if (commentBaseModel.getContentType().startsWith("image"))
               {    Picasso.get().load(commentBaseModel.getCommentFile()).resize(300,300).placeholder(R.drawable.file_ic).error(R.drawable.file_ic).into(commentViewholder.previewImage);
                   commentViewholder.previewImage.setBackground(mContext.getResources().getDrawable(R.drawable.preview_image_background));
               }else {
                   commentViewholder.previewImage.setScaleType(ImageView.ScaleType.CENTER);
                   //commentViewholder.previewImage.setBackgroundColor(mContext.getResources().getColor(R.color.white));
               }
               commentViewholder.previewImage.setVisibility(View.VISIBLE);
               commentViewholder.previewImage.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                       openFile(commentBaseModel);
                   }
               });

           }
       }
   }

   private void openFile(DoubtBaseModel.CommentBaseModel commentBaseModel) {
       String [] documentName = commentBaseModel.getCommentFile().split("/");
       mContext.startActivity(new Intent(mContext, RevampWebViewActivity.class)
               .putExtra(ConstantsImax.LINK,commentBaseModel.getCommentFile())
               .putExtra(ConstantsImax.DOCUMENT_NAME,documentName[documentName.length-1])
               .putExtra(ConstantsImax.ACTIVITY_TYPE,ConstantsImax.DOUBT_ACTIVITY)
               .putExtra(ConstantsImax.ACTION_TYPE,ConstantsImax.DOWNLOAD));

   }


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

   public static class DoubtCommentViewholder extends RecyclerView.ViewHolder {
        TextView textComment;
         ImageView previewImage;
       DoubtCommentViewholder(@NonNull View itemView) {
           super(itemView);
           textComment = itemView.findViewById(R.id.parent_comment_item_text);
           previewImage = itemView.findViewById(R.id.parent_comment_item_image);
       }
   }
   public static class DoubtCommentTeacherViewholder extends RecyclerView.ViewHolder {
       TextView textComment;
       ImageView previewImage;
       DoubtCommentTeacherViewholder(@NonNull View itemView) {
           super(itemView);
           textComment = itemView.findViewById(R.id.teacher_comment_item_text);
           previewImage = itemView.findViewById(R.id.teacher_comment_item_image);
       }
   }

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

   @Override
   public int getItemViewType(int position) {
       if (!Utils.checkNullOrblank(dataset.get(position).getStudentId())) {
           return TYPE_PARENT;
       } else  {
           return TYPE_TEACHER;
       }
   }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...