0

J'utilise l'adaptateur ci-dessous pour recyclerview dans l'application de chat, mais sur le défilement je positionne automatiquement changé. J'ai utilisé getItemViewType() Je pense que cela pose problème.Modification de la position de vue de l'élément dans RecyclerView sur défiler dans Android

public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MyViewHolder> { 

Context context; 
List<Message> messageList; 
private int SELF = 7861212; 

public MessageAdapter(Context context, List<Message> messages) { 
    messageList = messages; 
    this.context = context; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View mview = null; 

    if (viewType == SELF) { 
     mview = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_user2_item, parent, false); 
    } else { 
     mview = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_user1_item, parent, false); 

    } 

    return new MyViewHolder(mview); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 

    Message message = messageList.get(position); 

    holder.message_text.setText(message.getText()); 
    holder.chat_company_reply_author.setText(message.getName()); 


    if (message.isfile()) { 
     if (message.getMessageStatus() != null && message.getMessageStatus() == Status.DELIVERED) { 
      holder.rl_file.setVisibility(View.VISIBLE); 
      holder.progress_bar1.setVisibility(View.GONE); 
      try { 
       holder.user_reply_status.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_double_tick)); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
     if (message.getFiletype() != null) { 
      holder.rl_file.setVisibility(View.VISIBLE); 
     } 
    } else { 
     if (message.getMessageStatus() != null && message.getMessageStatus() == Status.DELIVERED) { 
      try { 
       holder.user_reply_status.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_double_tick)); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 

    try { 
     Picasso.with(context). 
       load(Constant.BASE_URL_FORDOWNLOD + "" + message.getFileurl()). 
       placeholder(R.mipmap.ic_launcher). 
       into(holder.img_chat); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

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

@Override 
public int getItemViewType(int position) { 
    Message message = messageList.get(position); 
    if (message.getUserType() == UserType.SELF) { 
     return SELF; 
    } 
    return position; 
} 

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

public void add(Message message, RecyclerView recyclerView) { 
    messageList.add(message); 
    notifyItemInserted(messageList.size() - 1); 
} 

public void mesage_status(int issent, int position) { 
    Message message = messageList.get(position); 
    if (issent == 1) { 
     message.setMessageStatus(Status.SENT); 
    } 
    if (issent == 2) { 
     message.setMessageStatus(Status.DELIVERED); 
    } 
    notifyItemChanged(position); 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 

    public TextView chat_company_reply_author, message_text, time_text; 
    public ImageView img_chat, user_reply_status; 
    public RelativeLayout rl_file; 
    public ProgressBar progress_bar1; 

    public MyViewHolder(View itemView) { 
     super(itemView); 

     img_chat = (ImageView) itemView.findViewById(R.id.img_chat); 
     user_reply_status = (ImageView) itemView.findViewById(R.id.user_reply_status); 
     chat_company_reply_author = (TextView) itemView.findViewById(R.id.chat_company_reply_author); 
     message_text = (TextView) itemView.findViewById(R.id.message_text); 
     time_text = (TextView) itemView.findViewById(R.id.time_text); 
     rl_file = (RelativeLayout) itemView.findViewById(R.id.rl_file); 
     progress_bar1 = (ProgressBar) itemView.findViewById(R.id.progress_bar1); 
    } 

    public void setvalue(Message message, int position) { 

     message_text.setText(message.getText()); 
     chat_company_reply_author.setText(message.getName()); 


     if (message.isfile()) { 
      if (message.getMessageStatus() != null && message.getMessageStatus() == Status.DELIVERED) { 
       rl_file.setVisibility(View.VISIBLE); 
       progress_bar1.setVisibility(View.GONE); 
       try { 
        user_reply_status.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_double_tick)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
      if (message.getFiletype() != null) { 
       rl_file.setVisibility(View.VISIBLE); 

      } 
     } else { 
      if (message.getMessageStatus() != null && message.getMessageStatus() == Status.DELIVERED) { 
       try { 
        user_reply_status.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_double_tick)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     } 

     try { 
      Picasso.with(context). 
        load(Constant.BASE_URL_FORDOWNLOD + "" + message.getFileurl()). 
        placeholder(R.mipmap.ic_launcher). 
        into(img_chat); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}} 

chat image

+2

Bienvenue dans StackOverflow! S'il vous plaît lire les lignes directrices de l'utilisateur sur la façon de poser une bonne question avant de poster une question (http://stackoverflow.com/help/how-to-ask) Merci –

+0

S'il vous plaît ne pas ajouter à la supplication urgente à nouveau. Si vous le faites, je demanderai à un modérateur de regarder votre message. Non seulement il est nécessaire pour vous de savoir que les volontaires ne prendront pas vos instructions urgentes, mais puisque vous l'avez résolu, il n'est clairement pas important d'insister sur votre version originale. – halfer

Répondre

0

j'ai obtenu mon problème est quand je l'utilise holder.rl_file.setVisibility(View.VISIBLE); il devrait être holder.rl_file.setVisibility(View.GONE); en condition fausse.