Android adapter设计模式三:聊天界面
发布日期:2021-06-30 22:37:31 浏览次数:2 分类:技术文章

本文共 4759 字,大约阅读时间需要 15 分钟。

1.效果图:

这里写图片描述

2.说明:

getViewTypeCount返回的就是种类数目了;
getItemViewType根据当然Item的position决定返回不同的整型变量。然后在getView中,根据消息的类型去加载不同的Item布局即可。

3.源码:

package com.example.android_robot_01;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.android_robot_01.bean.ChatMessage;import com.example.android_robot_01.bean.ChatMessage.Type;public class ChatMessageAdapter extends BaseAdapter{
private LayoutInflater mInflater; private List
mDatas; public ChatMessageAdapter(Context context, List
datas) { mInflater = LayoutInflater.from(context); mDatas = datas; } @Override public int getCount() { return mDatas.size(); } @Override public Object getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } /** * 接受到消息为1,发送消息为0 */ @Override public int getItemViewType(int position) { ChatMessage msg = mDatas.get(position); return msg.getType() == Type.INPUT ? 1 : 0; } @Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { ChatMessage chatMessage = mDatas.get(position); ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); if (chatMessage.getType() == Type.INPUT) { convertView = mInflater.inflate(R.layout.main_chat_from_msg, parent, false); viewHolder.createDate = (TextView) convertView .findViewById(R.id.chat_from_createDate); viewHolder.content = (TextView) convertView .findViewById(R.id.chat_from_content); convertView.setTag(viewHolder); } else { convertView = mInflater.inflate(R.layout.main_chat_send_msg, null); viewHolder.createDate = (TextView) convertView .findViewById(R.id.chat_send_createDate); viewHolder.content = (TextView) convertView .findViewById(R.id.chat_send_content); convertView.setTag(viewHolder); } } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.content.setText(chatMessage.getMsg()); viewHolder.createDate.setText(chatMessage.getDateStr()); return convertView; } private class ViewHolder {
public TextView createDate; public TextView name; public TextView content; }}

4、相关实体类:

package com.example.android_robot_01.bean;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;public class ChatMessage{
/** * 消息类型 */ private Type type ; /** * 消息内容 */ private String msg; /** * 日期 */ private Date date; /** * 日期的字符串格式 */ private String dateStr; /** * 发送人 */ private String name; public enum Type { INPUT, OUTPUT } public ChatMessage() { } public ChatMessage(Type type, String msg) { super(); this.type = type; this.msg = msg; setDate(new Date()); } public String getDateStr() { return dateStr; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); this.dateStr = df.format(date); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Type getType() { return type; } public void setType(Type type) { this.type = type; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}

5、布局文件

主界面消息的显示是一个ListView,不过这个listView中的Item有两种风格,一个是左边的绿色消息,一个是右边的白色消息
左边的消息布局文件:

右边的和左边基本一致,就不贴了,最后会给出代码。

源码下载:

链接: 密码:wr8w

———————————————————————

有需求者请加qq:136137465,非诚勿扰
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

转载地址:https://lovoo.blog.csdn.net/article/details/51556495 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android 创建第一个jni文件
下一篇:Jquery toggleClass的使用

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月08日 01时35分21秒