【发布时间】:2021-08-02 02:46:37
【问题描述】:
所以我正在构建一个聊天应用程序。我使用RecyclerView来显示消息,并将消息列表项的maxWidth设置为设备宽度的75%,在布局中,宽度为ConstraintLayout中的0dp,使其具有动态性。这使得它对于较小的文本更加简洁,当它是一个更长的文本时,它只是在达到 maxWidth 后将其发送到下一行。在项目列表增加之前,一切都运行良好。当有很多数据时,RecyclerView 使宽度像上一个列表项一样(我知道RecyclerView 回收视图)。对此的一种解决方案是在Adapter 的ViewHolder 中添加setIsRecyclable(false);。这确实有效,但列表项相互重叠,或者当一个列表项的数据发生更改时,它会重叠自身,在自身上创建另一项作为更改项。由于它不会回收视图,因此它会在列表项发生任何更改后自行创建新视图。我不知道该怎么办。我应该求助于ListView 吗?或者有没有其他解决方案?为了上下文,这是我的代码。
ViewHolder 设置maxWidth
public ChatViewHolder(@NonNull @NotNull View itemView, int width) {
super(itemView);
...
...
sendContainer.setMaxWidth(width);
comeContainer.setMaxWidth(width);
}
onCreateViewHolder计算maxWidth
@Override
public ChatViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.message_list_item, parent, false);
int width = (int) (parent.getWidth() * 0.75);
return new ChatViewHolder(view, width);
}
【问题讨论】:
标签: java android android-recyclerview