Recycler视图更改所有列表项的布局,而不是单个列表项

时间:2016-10-03 17:10:11

标签: android android-recyclerview chat layout-inflater

我正在使用xmpp在Android中实现聊天应用程序。我的聊天工作正常但是当我在聊天中为发件人和收件人设置布局时,inflater正在更改所有现有列表项的布局。 以下是用户发送" Hi" enter image description here

但是当接收者发送"你好"然后这个聊天消息即将进入左侧位置,但它也将其他消息发送到左侧位置,并且在发送消息时也是如此。 以下是用户收到" Hello"

时的屏幕截图

enter image description here

发送"然后是#34; 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="+918439198269@desktop-5ehan36/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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为,这是因为你的布局有圆形布局大小。您应该将TextView宽度更改为wrap_content而不是match_parent

<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. 使您的视图静态
  2. 如果简单的textview足够,则无需创建深层xml布局。