2016-10-03 5 views
1

xmppを使用してAndroidアプリケーションでチャットアプリケーションを実装しています。チャットはうまくいきますが、チャットで送信者と受信者のレイアウトを設定すると、既存のすべてのリスト項目。ユーザが「こんにちは」 enter image description hereリサイクラビューでは、単一のリストアイテムではないすべてのリストアイテムのレイアウトが変更されています

を送信しますが、受信機が送信したときに「こんにちは」、このチャットメッセージは、左の位置に来ているが、メッセージを送信するとき、それはまた、左postionと同じに他のメッセージを取っているとき は、下のスクリーンショットです。.. 「あなたはどのようにしている」enter image description here

が、私はどこIAいけない送信するときに、ユーザーが「こんにちは」

enter image description here

を受け取り、これに続くとき は、下のスクリーンショットですメートル間違っ

マイリサイクルビュー差出人レイアウト

chat_layout_self.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:layout_gravity="right|bottom" 
    android:gravity="right|bottom" 
    > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/chatsymbolself"> 

     <TextView 
      android:id="@+id/cltv" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="hi" 
      android:textSize="20sp" 
      android:textColor="#fff" 
      android:padding="10dp" 
      android:layout_gravity="left|bottom"/> 

    </LinearLayout> 


</LinearLayout> 

chat_layout_other.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:layout_gravity="left|bottom" 
    android:gravity="left|bottom" 
    > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/chatsymbolother"> 

     <TextView 
      android:id="@+id/cltv" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="hi" 
      android:textSize="20sp" 
      android:textColor="#fff" 
      android:padding="10dp" 
      android:layout_gravity="left"/> 

    </LinearLayout> 


</LinearLayout> 

MessageAdapter.java

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

    private String user="[email protected]/Android"; 
    private LayoutInflater inflater; 
    List<Message> data= Collections.emptyList(); 
    public MessageAdapter(Context context,List<Message> data){ 
     inflater=LayoutInflater.from(context); 
     this.data=data; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     Message message = data.get(position); 
     Log.e("MAdapter", "getItemViewType: from "+message.from); 
     if (message.from.equals(user)){ 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view; 
     MyViewHolder holder; 
     if(viewType==0){ 
      Log.e("MAdapter", "onCreateViewHolder: SEFL"); 
      view=LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_layout_self,parent,false); 

     } 
     else{ 
      Log.e("MAdapter", "onCreateViewHolder: OTHER"); 
      view=LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_layout_other,parent,false); 
     } 
     return new MyViewHolder(view); 
    } 

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

     final int itemType = getItemViewType(position); 

     Message current=data.get(position); 
     holder.chat.setText(current.msg); 
    } 

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

    class MyViewHolder extends RecyclerView.ViewHolder{ 

     TextView chat; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      chat=(TextView)itemView.findViewById(R.id.cltv); 
     } 
    } 
} 
+0

ログを投稿できますか?具体的にはLog.e( "MAdapter"、 "getItemViewType:from" + message.from);である程度の洞察を提供する必要があります –

+0

また、新しい 'Message'を扱う場所にコードを投稿できますか?新しいオブジェクトが 'List data'にどのように追加され、どのように' MessageAdapter'がその変更を通知されるかを示す。 –

+0

私はログに何もないと思う...それらはlogcat ..でユーザー名を表示するだけです。 Kevin Thomas –

答えて

0

私が思うに、それはベック円形のレイアウトサイズを持つあなたのレイアウトの使用。 match_parentではなく、TextViewの幅をwrap_contentに変更する必要があります。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/cltv" 
     android:background="@drawable/chatsymbolother" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="hi" 
     android:textSize="20sp" 
     android:textColor="#fff" 
     android:padding="10dp" 
     android:layout_gravity="left"/> 
</LinearLayout> 
  1. 簡単なのTextViewが十分にある場合は、深いXMLレイアウトを作成する必要はありません
  2. あなたviewholderは、静的にします。
+0

ありがとうございましたが、それも動作していません –

関連する問題