Android 回收视图项目包装内容宽度
我的Recyclerview是一个邮件列表 每个项目都是带有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
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();
}