聊天的界面的呈现。采用listview结合适配器adapter完成;
配置文件需要定义一个主显示文件,包含listview和发送的EditText和一个send按钮Button,两个对话消息样式。
先直接贴出代码,在代码中具体来说明需要注意的地方:
MainMessage.java —Activity页面
/**
* Created by caishaohua on 2016/7/19.
* Email:icaishaohua@gmail.com
*/
public classMainMessageextendsActivityimplementsView.OnClickListener {
privateButtonsend;
privateEditTextet_sendmessage;
privateListViewlistview;
privateChatMessageAdapterchatMessageAdapter;
privateListmDataArrays=newArrayList();
@Override
protected voidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_message);
//禁止软键盘弹起
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
initView();
initData();
}
private voidinitView() {
send= (Button) findViewById(R.id.btn_send);
et_sendmessage= (EditText) findViewById(R.id.et_sendmessage);
listview= (ListView) findViewById(R.id.msg_listview);
send.setOnClickListener(this);
}
privateString[]msgArray=newString[]{"是妹子?","是,你是?","我也是","真巧哦",
"那我们在一起如何啊","可以啊,你是哪里的人,我们可能是老乡哦",
"达州人","尼滚....",};
privateString[]dataArray=newString[]{"2016-05-12 18:00","2016-05-12 18:10",
"2016-05-12 18:11","2016-05-12 18:20",
"2016-05-12 18:30","2016-05-12 18:35",
"2016-05-12 18:40","2016-05-12 18:50"};
private final static intCOUNT=8;
private voidinitData() {
for(inti =1;i
ChatMessageEnitychatmessageEnity =newChatMessageEnity();
chatmessageEnity.setDate(dataArray[i]);
if(i%2==0){
chatmessageEnity.setName("对方");
chatmessageEnity.setCommsg(true);
}else{
chatmessageEnity.setName("我方");
chatmessageEnity.setCommsg(false);
}
chatmessageEnity.setText(msgArray[i]);
mDataArrays.add(chatmessageEnity);
}
chatMessageAdapter=newChatMessageAdapter(this,mDataArrays);
listview.setAdapter(chatMessageAdapter);
}
@Override
public voidonClick(Viewview) {
if(view.getId() ==R.id.btn_send){
send();
}
}
//输入发送消息
private void send() {
Stringsend_content =et_sendmessage.getText().toString();
if(send_content.length() >0){
ChatMessageEnitychatmessageEnity =newChatMessageEnity();
chatmessageEnity.setName("我方");
chatmessageEnity.setText(send_content);
chatmessageEnity.setCommsg(false);
chatmessageEnity.setDate(getDate());
mDataArrays.add(chatmessageEnity);
chatMessageAdapter.notifyDataSetChanged();
et_sendmessage.setText("");
listview.setSelection(listview.getCount()-1);
}
}
//获取系统当前时间
publicStringgetDate() {
Calendar c = Calendar.getInstance();
Stringyear =String.valueOf(c.get(Calendar.YEAR));
Stringmouth =String.valueOf(c.get(Calendar.MONTH));
Stringday =String.valueOf(c.get(Calendar.DAY_OF_MONTH)+1);
Stringhour =String.valueOf(c.get(Calendar.DAY_OF_WEEK));
Stringmins =String.valueOf(c.get(Calendar.MINUTE));
StringBufferstringBuffer =newStringBuffer();
stringBuffer.append(year+"-"+mouth+"-"+day+"-"+hour+":"+mins);
returnstringBuffer.toString();
}
}
ChatMessageAdapter.java 消息的adapter
/**
* Created by caishaohua on 2016/7/19.
* Email:icaishaohua@gmail.com
*/
public classChatMessageAdapterextendsBaseAdapter{
//用来监听哪一个发出的,两个item样式
public static interfaceIMsgViewType
{
intIMVT_COM_MSG=0;
intIMVT_TO_MSG=1;
}
private Context context;
private List list;
LayoutInflater mLayoutInflater;
public ChatMessageAdapter (Context context,List list) {
this.context= context;
this.list= list;
mLayoutInflater=LayoutInflater.from(context);
}
@Override
public intgetCount() {
returnlist.size();
}
@Override
publicObjectgetItem(inti) {
returnlist.get(i);
}
@Override
public longgetItemId(inti) {
returni;
}
public intgetItemViewType(intposition) {
//TODO Auto-generated method stub
ChatMessageEnityentity =list.get(position);
if(entity.isCommsg())
{
returnIMsgViewType.IMVT_COM_MSG;
}else{
returnIMsgViewType.IMVT_TO_MSG;
}
}
public intgetViewTypeCount() {
return2;
}
@Override
publicViewgetView(inti,Viewview,ViewGroup viewGroup) {
ChatMessageEnitychatMessageEnity =list.get(i);
booleanisComMsg = chatMessageEnity.isCommsg();
ViewHolderviewHolder =null;
if(view ==null) {
if(isComMsg ==true) {
view =mLayoutInflater.inflate(R.layout.chat_msg_one, null);//对方对话条目
}else{
view =mLayoutInflater.inflate(R.layout.chat_msg_twe, null);//我方对方条目
}
viewHolder =newViewHolder();
viewHolder.tvUserName= (TextView) view.findViewById(R.id.tv_name);
viewHolder.tvSendTime= (TextView) view.findViewById(R.id.tv_date);
viewHolder.tvContent= (TextView) view.findViewById(R.id.tv_content);
viewHolder.isComMsg= isComMsg;
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tvUserName.setText(chatMessageEnity.getName());
viewHolder.tvSendTime.setText(chatMessageEnity.getDate());
viewHolder.tvContent.setText(chatMessageEnity.getText());
returnview;
}
static classViewHolder{
publicTextViewtvSendTime;
publicTextViewtvUserName;
publicTextViewtvContent;
public booleanisComMsg=true;
}
}
ChatMessageEnity.java 对所有消息有关的信息进行封装
/**
* Created by caishaohua on 2016/7/19.
* Email:icaishaohua@gmail.com
*/
public classChatMessageEnity{
privateStringname;
privateStringdate;
privateStringtext;
private booleanisCommsg=true;
publicChatMessageEnity() {
}
publicChatMessageEnity(Stringname,Stringdate,Stringtext, booleanisCommsg) {
this.name= name;
this.date= date;
this.text= text;
this.isCommsg= isCommsg;
}
publicStringgetName() {
returnname;
}
public voidsetName(Stringname) {
this.name= name;
}
publicStringgetDate() {
returndate;
}
public voidsetDate(Stringdate) {
this.date= date;
}
publicStringgetText() {
returntext;
}
public voidsetText(Stringtext) {
this.text= text;
}
public booleanisCommsg() {
returnisCommsg;
}
public voidsetCommsg(booleancommsg) {
isCommsg= commsg;
}
}
网友评论