xmppを使用してAndroidアプリケーションでチャットアプリケーションを実装しています。チャットはうまくいきますが、チャットで送信者と受信者のレイアウトを設定すると、既存のすべてのリスト項目。ユーザが「こんにちは」 リサイクラビューでは、単一のリストアイテムではないすべてのリストアイテムのレイアウトが変更されています
を送信しますが、受信機が送信したときに「こんにちは」、このチャットメッセージは、左の位置に来ているが、メッセージを送信するとき、それはまた、左postionと同じに他のメッセージを取っているとき は、下のスクリーンショットです。.. 「あなたはどのようにしている」
が、私はどこIAいけない送信するときに、ユーザーが「こんにちは」
を受け取り、これに続くとき は、下のスクリーンショットですメートル間違っ
マイリサイクルビュー差出人レイアウト
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);
}
}
}
ログを投稿できますか?具体的にはLog.e( "MAdapter"、 "getItemViewType:from" + message.from);である程度の洞察を提供する必要があります –
また、新しい 'Message'を扱う場所にコードを投稿できますか?新しいオブジェクトが 'List data'にどのように追加され、どのように' MessageAdapter'がその変更を通知されるかを示す。 –
私はログに何もないと思う...それらはlogcat ..でユーザー名を表示するだけです。 Kevin Thomas –