Android 回收视图项目包装内容宽度

Android 回收视图项目包装内容宽度,android,layout,android-recyclerview,android-layoutparams,Android,Layout,Android Recyclerview,Android Layoutparams,我的Recyclerview是一个邮件列表 每个项目都是带有wrap\u内容宽度的线性布局 问题是,当插入一个新项目时,如果项目较大,则该项目将采用上一个项目的宽度(这使它看起来像有一个大的填充) 我在ViewHolder构造函数中尝试了setRecycable(false),但这导致了一些问题,我想使用另一种方法 感谢您的帮助。 谢谢 编辑:布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

我的Recyclerview是一个邮件列表

每个项目都是带有
wrap\u内容
宽度的线性布局

问题是,当插入一个新项目时,如果项目较大,则该项目将采用上一个项目的宽度(这使它看起来像有一个大的填充)

我在ViewHolder构造函数中尝试了
setRecycable(false)
,但这导致了一些问题,我想使用另一种方法

感谢您的帮助。 谢谢

编辑:布局:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<include
    android:id="@+id/message_date_layout"
    layout="@layout/time_bubble"/>

<LinearLayout
    android:id="@+id/message_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:layout_marginEnd="30dp"
    android:layout_marginLeft="6dp"
    android:layout_marginRight="30dp"
    android:layout_marginStart="6dp"
    android:background="@drawable/background_incoming_chat_bubble"
    android:orientation="vertical"
    android:padding="6dp">
//other views
 </LinearLayout>
</LinearLayout>

用这个更新你的上面

 @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    ChatMessagesAdapter.ViewHolder viewHolder;
    LayoutInflater inflater = LayoutInflater.from(context);
    View v = null;
    switch (viewType) {
        case OUTGOING:
            v = inflater.inflate(R.layout.chat_bubble_outgoing, null, false);
            break;
        case INCOMING:
            v = inflater.inflate(R.layout.chat_bubble_incoming, null, false);
            break;
    }
    viewHolder = new ChatMessagesAdapter.ViewHolder(v);
    return viewHolder;
}
并使用
holder.setIsRecyclable(false)
        @Override
        public int getItemViewType(int position) {
            if (datas.get(position).getType() == Utils.OUTGOING) {
                return Utils.OUTGOING;
            } else {
                return Utils.INCOMING;
            }
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view;
            switch (viewType) {
                case Utils.OUTGOING:
                    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_bubble_outgoing, parent, false);
                    return new OUTGOINGHolder(view);
                case Utils.INCOMING:
                    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_bubble_incoming, parent, false);
                    return new INCOMINGHolder(view);
            }
            return null;
        }

你能在你的适配器里试试这个吗

      @Override
      public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            holder.itemView.requestLayout();
      }

可能这将迫使版面重新计算其尺寸

请添加一些代码。@FiN编辑了原始的postcould您可以共享
chat\u bubble\u outing
chat\u bubble\u in传入
版面吗?我只对传入版面有问题。这就是我在onCreateViewHolder上面发布的布局。基本上就像我贴的一样。id为“message_container”的Linearlayout的行为很奇怪。我会将代码更新为完整布局您找到解决方案了吗?我面临着类似的问题。你好,我试过上面的方法。使用时出现问题:notifyItemChanged(0);该项变为“更改”,但它的旧副本显示在其顶部,浮动。古怪移除支架。设置可循环(错误);并更新您发现的更改。如果setIsRecycable为true,则不会更改。布局仍然采用上一个项目的宽度,可以显示布局图像。以及xml布局的完整代码。松散的性能意味着什么?这个对我有用。虽然我没有对我的itemview执行此操作,但是对itemview中的视图执行此操作。
      @Override
      public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            holder.itemView.requestLayout();
      }