仿微信聊天列表之RecyclerView多布局

1

仿微信聊天列表之RecyclerView多布局

仿微信聊天列表之RecyclerView多布局

最近在做关于聊天的项目,需要用到RecyclerView多布局,然而在网上却没有比较详细的讲解,于是萌生了自己写一篇的念头,可能写的不好,不喜勿喷。转载请标明出处,原创不易效果图不废话直接先上效果图:

![效果图]( {

implementation 'androidx.recyclerview:recyclerview:1.2.1'

}

```

接下来,我们需要创建一个数据模型来存储聊天消息的信息:

```javapublic class ChatMessage {

private String content;

private int type; //0: 文本,1: 图片,2: 视频 public ChatMessage(String content, int type) {

this.content = content;

this.type = type;

}

public String getContent() {

return content;

}

public int getType() {

return type;

}

}

```

RecyclerView的配置

在布局文件中,我们需要创建一个RecyclerView,并且设置其Adapter:

```xml

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

```

```javapublic class ChatAdapter extends RecyclerView.Adapter {

private List chatMessages;

public ChatAdapter(List chatMessages) {

this.chatMessages = chatMessages;

}

@Override public int getItemViewType(int position) {

return chatMessages.get(position).getType();

}

@NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

if (viewType ==0) { // 文本消息 return new TextViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_text, parent, false));

} else if (viewType ==1) { // 图片消息 return new ImageViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false));

} else { // 视频消息 return new VideoViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_video, parent, false));

}

}

@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

ChatMessage chatMessage = chatMessages.get(position);

if (holder instanceof TextViewHolder) {

((TextViewHolder) holder).bindData(chatMessage.getContent());

} else if (holder instanceof ImageViewHolder) {

((ImageViewHolder) holder).bindData(chatMessage.getContent());

} else { // 视频消息 ((VideoViewHolder) holder).bindData(chatMessage.getContent());

}

}

@Override public int getItemCount() {

return chatMessages.size();

}

}

```

多布局的实现

在上面的代码中,我们使用了RecyclerView的getItemViewType方法来确定每个消息类型的布局。然后,我们使用onCreateViewHolder方法来创建不同的ViewHolder,并且使用onBindViewHolder方法来绑定数据。

```javapublic class TextViewHolder extends RecyclerView.ViewHolder {

public TextViewHolder(@NonNull View itemView) {

super(itemView);

// ...

}

public void bindData(String content) {

// ...

}

}

public class ImageViewHolder extends RecyclerView.ViewHolder {

public ImageViewHolder(@NonNull View itemView) {

super(itemView);

// ...

}

public void bindData(String content) {

// ...

}

}

public class VideoViewHolder extends RecyclerView.ViewHolder {

public VideoViewHolder(@NonNull View itemView) {

super(itemView);

// ...

}

public void bindData(String content) {

// ...

}

}

```

总结

通过上面的代码,我们可以实现一个仿微信聊天列表的RecyclerView多布局。我们使用了RecyclerView的getItemViewType方法来确定每个消息类型的布局,并且使用onCreateViewHolder和onBindViewHolder方法来绑定数据。

当然,这只是一个基本的例子,你可能需要根据自己的需求进行调整和扩展。

聊天微信聊天布局UI

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 备份微信聊天记录为 txt 格式保存(免 root)

下一篇 有什么软件可以恢复微信聊天记录?