版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现一个微信聊天界面
今天就跟大家聊聊有关Android中怎么实现一个微信聊天界面,可能很多人都不太了解,为了让大家更加了解,在下给大家总结了以下内容,希望大家根据这篇文章可以有所收获。项目的主体结构:下面是Activity的代码:package
com.way.demo;
import
java.text.SimpleDateFormat;
import
java.util.ArrayList;
import
java.util.Date;
import
java.util.List;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.ListView;
/**
*
@author
way
*/
public
class
WeixinChatDemoActivity
extends
Activity
implements
OnClickListener
{
private
Button
mBtnSend;//
发送btn
private
Button
mBtnBack;//
返回btn
private
EditText
mEditTextContent;
private
ListView
mListView;
private
ChatMsgViewAdapter
mAdapter;//
消息视图的Adapter
private
List<ChatMsgEntity>
mDataArrays
=
new
ArrayList<ChatMsgEntity>();//
消息对象数组
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();//
初始化view
initData();//
初始化数据
mListView.setSelection(mAdapter.getCount()
-
1);
}
/**
*
初始化view
*/
public
void
initView()
{
mListView
=
(ListView)
findViewById(R.id.listview);
mBtnSend
=
(Button)
findViewById(R.id.btn_send);
mBtnSend.setOnClickListener(this);
mBtnBack
=
(Button)
findViewById(R.id.btn_back);
mBtnBack.setOnClickListener(this);
mEditTextContent
=
(EditText)
findViewById(R.id.et_sendmessage);
}
private
String[]
msgArray
=
new
String[]
{
"有大吗",
"有!你呢?",
"我也有",
"那上吧",
"打啊!你放大啊!",
"你TM咋不放大呢?留大抢人头啊?CAO!你个菜B",
"2B不解释",
"尼滚...",
"今晚去网吧包夜吧?",
"有毛片吗?",
"种子一大堆啊~还怕没片?",
"OK,搞起!!"
};
private
String[]
dataArray
=
new
String[]
{
"2012-09-22
18:00:02",
"2012-09-22
18:10:22",
"2012-09-22
18:11:24",
"2012-09-22
18:20:23",
"2012-09-22
18:30:31",
"2012-09-22
18:35:37",
"2012-09-22
18:40:13",
"2012-09-22
18:50:26",
"2012-09-22
18:52:57",
"2012-09-22
18:55:11",
"2012-09-22
18:56:45",
"2012-09-22
18:57:33",
};
private
final
static
int
COUNT
=
12;//
初始化数组总数
/**
*
模拟加载消息历史,实际开发可以从数据库中读出
*/
public
void
initData()
{
for
(int
i
=
0;
i
<
COUNT;
i++)
{
ChatMsgEntity
entity
=
new
ChatMsgEntity();
entity.setDate(dataArray[i]);
if
(i
%
2
==
0)
{
entity.setName("肖B");
entity.setMsgType(true);//
收到的消息
}
else
{
entity.setName("必败");
entity.setMsgType(false);//
自己发送的消息
}
entity.setMessage(msgArray[i]);
mDataArrays.add(entity);
}
mAdapter
=
new
ChatMsgViewAdapter(this,
mDataArrays);
mListView.setAdapter(mAdapter);
}
@Override
public
void
onClick(View
v)
{
switch
(v.getId())
{
case
R.id.btn_send://
发送按钮点击事件
send();
break;
case
R.id.btn_back://
返回按钮点击事件
finish();//
结束,实际开发中,可以返回主界面
break;
}
}
/**
*
发送消息
*/
private
void
send()
{
String
contString
=
mEditTextContent.getText().toString();
if
(contString.length()
>
0)
{
ChatMsgEntity
entity
=
new
ChatMsgEntity();
entity.setName("必败");
entity.setDate(getDate());
entity.setMessage(contString);
entity.setMsgType(false);
mDataArrays.add(entity);
mAdapter.notifyDataSetChanged();//
通知ListView,数据已发生改变
mEditTextContent.setText("");//
清空编辑框数据
mListView.setSelection(mListView.getCount()
-
1);//
发送一条消息时,ListView显示选择最后一项
}
}
/**
*
发送消息时,获取当前事件
*
*
@return
当前时间
*/
private
String
getDate()
{
SimpleDateFormat
format
=
new
SimpleDateFormat("yyyy-MM-dd
hh:mm:ss");
return
format.format(new
Date());
}
}ListView的代码:package
com.way.demo;
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;
/**
*
消息ListView的Adapter
*
*
@author
way
*/
public
class
ChatMsgViewAdapter
extends
BaseAdapter
{
public
static
interface
IMsgViewType
{
int
IMVT_COM_MSG
=
0;//
收到对方的消息
int
IMVT_TO_MSG
=
1;//
自己发送出去的消息
}
private
static
final
int
ITEMCOUNT
=
2;//
消息类型的总数
private
List<ChatMsgEntity>
coll;//
消息对象数组
private
LayoutInflater
mInflater;
public
ChatMsgViewAdapter(Context
context,
List<ChatMsgEntity>
coll)
{
this.coll
=
coll;
mInflater
=
LayoutInflater.from(context);
}
public
int
getCount()
{
return
coll.size();
}
public
Object
getItem(int
position)
{
return
coll.get(position);
}
public
long
getItemId(int
position)
{
return
position;
}
/**
*
得到Item的类型,是对方发过来的消息,还是自己发送出去的
*/
public
int
getItemViewType(int
position)
{
ChatMsgEntity
entity
=
coll.get(position);
if
(entity.getMsgType())
{//收到的消息
return
IMsgViewType.IMVT_COM_MSG;
}
else
{//自己发送的消息
return
IMsgViewType.IMVT_TO_MSG;
}
}
/**
*
Item类型的总数
*/
public
int
getViewTypeCount()
{
return
ITEMCOUNT;
}
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
ChatMsgEntity
entity
=
coll.get(position);
boolean
isComMsg
=
entity.getMsgType();
ViewHolder
viewHolder
=
null;
if
(convertView
==
null)
{
if
(isComMsg)
{
convertView
=
mInflater.inflate(
R.layout.chatting_item_msg_text_left,
null);
}
else
{
convertView
=
mInflater.inflate(
R.layout.chatting_item_msg_text_right,
null);
}
viewHolder
=
new
ViewHolder();
viewHolder.tvSendTime
=
(TextView)
convertView
.findViewById(R.id.tv_sendtime);
viewHolder.tvUserName
=
(TextView)
convertView
.findViewById(R.id.tv_username);
viewHolder.tvContent
=
(TextView)
convertView
.findViewById(R.id.tv_chatcontent);
viewHolder.isComMsg
=
isComMsg;
convertView.setTag(viewHolder);
}
else
{
viewHolder
=
(ViewHolder)
convertView.getTag();
}
viewHolder.tvSendTime.setText(entity.getDate());
viewHolder.tvUserName.setText(entity.getName());
viewHolder.tvContent.setText(entity.getMessage());
return
convertView;
}
static
class
ViewHolder
{
public
TextView
tvSendTime;
public
TextView
tvUserName;
public
TextView
tvContent;
public
boolean
isComMsg
=
true;
}
}消息对象的代码:package
com.way.demo;
/**
*
一个消息的JavaBean
*
*
@author
way
*
*/
public
class
ChatMsgEntity
{
private
String
name;//消息来自
private
String
date;//消息日期
private
String
message;//消息内容
private
boolean
isComMeg
=
true;//
是否为收
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国药集团昆明血液制品有限公司招聘1人(云南)笔试备考试题及答案解析
- 2026年天府新区航空旅游职业学院单招综合素质考试参考题库含详细答案解析
- 2026新疆和田水务发展集团有限责任公司招(竞)聘20人笔试备考题库及答案解析
- 2026年中国港湾工程有限责任公司招聘(23人)笔试备考题库及答案解析
- 2026年云南工贸职业技术学院单招综合素质考试参考题库含详细答案解析
- 2026年合肥市瑶海区招聘编外聘用教师66名笔试备考试题及答案解析
- 2026年山西华澳商贸职业学院高职单招职业适应性测试模拟试题及答案详细解析
- 2026年昆明卫生职业学院单招职业技能考试模拟试题含详细答案解析
- 2026四川成都市龙泉驿区西河幼儿园集团招聘5人笔试备考试题及答案解析
- 2026重庆机电控股集团机电工程技术有限公司招聘18人笔试备考试题及答案解析
- 泳池突发安全事故应急预案
- 03K501-1 燃气红外线辐射供暖系统设计选用及施工安装
- 2026年甘肃省公信科技有限公司面向社会招聘80人(第一批)考试重点题库及答案解析
- 2026年上海市虹口区初三上学期一模化学试卷和参考答案
- 高考英语同义词近义词(共1142组)
- 2026年东营科技职业学院单招综合素质考试必刷测试卷附答案
- 2025年安徽省选调生考试笔试试卷【附答案】
- 2024年小红书酒店集团通案(小游记·探寻新解法)
- 2025年高考英语复习热点题型专项训练:阅读理解词义猜测题(解析版)
- AQ 2026-2010 金属非金属矿山提升钢丝绳检验规范(正式版)
- 大学生预征对象登记表模板
评论
0/150
提交评论