2017-09-21 2 views
0

je développe une application pour envoyer et recevoir des messages en utilisant les messages firebase apparaissent agréable et propre quand tous les messages sont du même côté ..Articles de liste de liste change tout en faisant défiler dans Android .. Comment l'éviter?

adaptar:

 @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false); 
    } 
     ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView); 
     TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView); 
     TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView); 
     LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.image_container); 
     FriendlyMessage message = getItem(position); 
     boolean isPhoto = message.getPhotoUrl() != null; 
     if (isPhoto) { 
      messageTextView.setVisibility(View.GONE); 
      layout.setVisibility(View.VISIBLE); 
      layout.setMinimumHeight(200); 
      photoImageView.setVisibility(View.VISIBLE); 
      Glide.with(photoImageView.getContext()) 
        .load(message.getPhotoUrl()) 
        .into(photoImageView); 
     } else { 
      messageTextView.setVisibility(View.VISIBLE); 
      photoImageView.setVisibility(View.GONE); 
      layout.setVisibility(View.GONE); 
      layout.setMinimumHeight(0); 
      messageTextView.setText(message.getText()); 
     } 


     messageTextView.setText(message.getText()); 
     authorTextView.setText("." + message.getName()); 


    return convertView; 

Mais je veux avoir les utilisateurs propres messages dans le côté droit écrit alors un code qui est en gras ci-dessous, il fonctionne très bien au début et à défiler tous les quarts de travail à droite .. essayé overridding getviewcounttype mais ne peux pas être correctement mis en œuvre ... les solutions pour changer le code ou pour empêcher déplacement des articles ..

This Image is working fine at first

Upon Scroll all gets moved to right

C'est le code ci-dessus change

 @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false); 
    } 
     ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView); 
     TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView); 
     TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView); 
     LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.image_container); 
     FriendlyMessage message = getItem(position); 
     boolean isPhoto = message.getPhotoUrl() != null; 
     if (isPhoto) { 
      messageTextView.setVisibility(View.GONE); 
      layout.setVisibility(View.VISIBLE); 
      layout.setMinimumHeight(200); 
      photoImageView.setVisibility(View.VISIBLE); 
      Glide.with(photoImageView.getContext()) 
        .load(message.getPhotoUrl()) 
        .into(photoImageView); 
     } else { 
      messageTextView.setVisibility(View.VISIBLE); 
      photoImageView.setVisibility(View.GONE); 
      layout.setVisibility(View.GONE); 
      layout.setMinimumHeight(0); 
      messageTextView.setText(message.getText()); 
     } 
     //Modified part to displaying messages on right 
     try { 
      if (user.getDisplayName().equalsIgnoreCase(message.getName())) { 
       System.out.println("At Gravity" + user.getDisplayName().toString() + message.getName()); 
       messageTextView.setGravity(Gravity.RIGHT); 
       authorTextView.setGravity(Gravity.RIGHT); 
       layout.setGravity(Gravity.RIGHT); 
       messageTextView.setMaxWidth(200); 
      authorTextView.setTextColor(Color.CYAN); 
      } 
     } catch (NullPointerException e) { 
      System.out.println("Exception catched"); 
     } 
     messageTextView.setText(message.getText()); 
     authorTextView.setText("." + message.getName()); 


    return convertView; 

possible Tout correctif pour ce problème ???

Répondre

1

Vous devez ajouter une instruction else depuis le ListView réutilise ses itemviews. Une fois que vous avez défini une vue vers la droite, elle n'a aucune chance de modifier son alignement vers la gauche par elle-même.

if (user.getDisplayName().equalsIgnoreCase(message.getName())) { 
    System.out.println("At Gravity" + user.getDisplayName().toString() + message.getName()); 
    messageTextView.setGravity(Gravity.RIGHT); 
    authorTextView.setGravity(Gravity.RIGHT); 
    layout.setGravity(Gravity.RIGHT); 
    messageTextView.setMaxWidth(200); 
    authorTextView.setTextColor(Color.CYAN); 
}else{ 
    messageTextView.setGravity(Gravity.LEFT); 
    authorTextView.setGravity(Gravity.LET); 
    layout.setGravity(Gravity.LEFT); 
    messageTextView.setMaxWidth(200); 
    authorTextView.setTextColor(Color.CYAN); 
} 
+0

Merci pour la réponse ... Oui à l'aide d'autre est simple et fonctionne parfaitement son ... est embrouillé par de nombreuses autres méthodes publiées par d'autres comme remplaçant GetCount et des choses ... – user8645931

3

S'il vous plaît utiliser setTag() et getTag() dans l'adaptateur, mais la meilleure pratique consiste à utiliser RecyclerView au lieu de ListView.