2017-09-21 15 views
0

私は、すべてのメッセージが同じ側にあるときにメッセージがきれいに表示されfirebaseを使用してメッセージを送受信するアプリを開発してきた。..アンドロイドでスクロールしている間、リストビューの項目が変わります。

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; 

しかし、私は持っていたいですユーザーは右側のメッセージを所有しているので、下に太字で表示されたコードを書いて、最初はスクロールし、スクロールするとすべて右側に移動します。getviewcounttypeを上書きしようとしましたが、正しく実装できません...コードを変更したり、アイテムの移動..

This Image is working fine at first

Upon Scroll all gets moved to right

これは、上記のコードは、この問題のために

 @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; 

任意の可能な修正を変更しています?

答えて

1

ListViewはitemviewsを再利用するため、else文を追加する必要があります。ビューを右に設定すると、それ自体で左にアラインメントを変更する機会はありません。

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

他の人を使用していることは、単純で完全に動作しています... getcountなどのオーバーライドのような他の人が投稿した他の多くの方法で混乱しました... – user8645931

3

setTagを(使用してください)とのgetTag()アダプタ、 でより良い練習はRecyclerViewの代わりListViewを使用することです。

関連する問題