配色: 字号:
Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例
2016-10-13 | 阅:  转:  |  分享 
  
Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例

看标题这么高大上,实际上,还是运用我么拿到listview去扩展,我们讲什么呢,就是研究一下QQ,微信的这种对话列表,我们先看一个传统的ListView是怎么样的,我们做一个通讯录吧,通讯录的组成就是一个头像,一个名字,一个电话号码,一个点击拨打的按钮,既然这样,那我们的item就出来了

call_list_item.xml






android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_vertical"

android:orientation="horizontal">




android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"

android:src="@mipmap/ic_launcher"/>




android:id="@+id/tv_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"/>




android:id="@+id/tv_number"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="3"/>




android:id="@+id/mCall"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1"/>







大家都知道,我们一个listview还是需要一个数据集,那我们就写一个Java的实体类吧

ContentBean



packagecom.lgl.wechatlist.bean;



importandroid.widget.Button;



/

实体类



@authorLGL

/

publicclassContentBean{



privateStringname;

privateStringnumber;



privateButtonmButton;





publicStringgetName(){

returnname;

}



publicvoidsetName(Stringname){

this.name=name;

}



publicStringgetNumber(){

returnnumber;

}



publicvoidsetNumber(Stringnumber){

this.number=number;

}



publicButtongetmButton(){

returnmButton;

}



publicvoidsetmButton(ButtonmButton){

this.mButton=mButton;

}

}



传统的ListView,我相信大家都知道写,直接给出Adapter

ContentAdapter



packagecom.lgl.wechatlist.adapter;



importandroid.content.Context;

importandroid.content.Intent;

importandroid.net.Uri;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.Button;

importandroid.widget.TextView;



importcom.lgl.wechatlist.R;

importcom.lgl.wechatlist.bean.ContentBean;



importjava.util.List;



publicclassContentAdapterextendsBaseAdapter{



privateContextmContext;



privateListmList;



privateLayoutInflatermInflater;



privateContentBeanbean;



publicContentAdapter(ContextmContext,ListmList){

this.mContext=mContext;

this.mList=mList;

mInflater=(LayoutInflater)mContext

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}



@Override

publicintgetCount(){

//TODOAuto-generatedmethodstub

returnmList.size();

}



@Override

publicObjectgetItem(intposition){

//TODOAuto-generatedmethodstub

returnmList.get(position);

}



@Override

publiclonggetItemId(intposition){

//TODOAuto-generatedmethodstub

returnposition;

}



@Override

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

ViewHodlerviewHodler;



if(convertView==null){



viewHodler=newViewHodler();

convertView=mInflater.inflate(R.layout.call_list_item,null);

viewHodler.tv_name=(TextView)convertView

.findViewById(R.id.tv_name);

viewHodler.tv_number=(TextView)convertView

.findViewById(R.id.tv_number);

viewHodler.mCall=(Button)convertView.findViewById(R.id.mCall);

convertView.setTag(viewHodler);

}else{

viewHodler=(ViewHodler)convertView.getTag();

}



bean=mList.get(position);

viewHodler.tv_name.setText(bean.getName());

viewHodler.tv_number.setText(bean.getNumber());

viewHodler.mCall.setText("拨打");

viewHodler.mCall.setOnClickListener(newOnClickListener(){



@Override

publicvoidonClick(Viewv){

Call(bean.getNumber());

}

});



returnconvertView;

}



classViewHodler{

privateTextViewtv_name;

privateTextViewtv_number;

privateButtonmCall;

}



/

拨打电话



@paramphone

/

publicvoidCall(Stringphone){

Intentintent=newIntent();

intent.setAction("android.intent.action.CALL");

intent.addCategory("android.intent.category.DEFAULT");

intent.setData(Uri.parse("tel:"+phone));

mContext.startActivity(intent);

}



}



当然,还需要在我们的主类中获取数据

packagecom.lgl.listview;



importjava.util.ArrayList;

importjava.util.List;



importandroid.app.Activity;

importandroid.database.Cursor;

importandroid.os.Bundle;

importandroid.provider.ContactsContract;

importandroid.widget.ListView;



publicclassMainActivityextendsActivity{



privateListViewmListView;

//联系人集合

privateListcontentName=newArrayList();

//号码集合

privateListcontentPhone=newArrayList();

privateListlist=newArrayList();



@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);



getContent();

mListView=(ListView)findViewById(R.id.mListView);



for(inti=0;i
ContentBeanbean=newContentBean();

bean.setName(contentName.get(i));

bean.setNumber(contentPhone.get(i));

list.add(bean);

}



ContentAdapteradapter=newContentAdapter(this,list);

mListView.setAdapter(adapter);



}



/

获取联系人

/

privatevoidgetContent(){

Cursorquery=getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,

null,null);

//创建一个对象进行储存

Stringname;//联系人

Stringphone;//电话号码

//我们获取到这些信息之后遍历出来

while(query.moveToNext()){

//获取名字就需要Phone.DISPLAY_NAME

name=query

.getString(query

.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

//获取num字段需要Phone.NUMBER

phone=query

.getString(query

.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

contentName.add(name);

contentPhone.add(phone);

}

}

}



这样,一个简易的通讯录就做好了



OK,这个没什么问题,但是我们今天要讨论的,是一个对话的ListView,这在我们之前看的群英传一书中也提到过Android群英传笔记——第四章:ListView使用技巧,但是讲的不是很详细,我们这里就多讲一下了,我们要区分左右,也就是type,需要用到getViewTypeCount()和getItemViewType()方法,根据数据源的position返回需要显示的的layout的type,那我们从易到难,先写一个简单点的,就一个简单的文字对话框,怎么实现呢?我们当然得先定义left和right的item布局了

chatlist_left.xml






android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="bottom"

android:orientation="horizontal"

android:padding="10dp">




android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:src="@mipmap/ic_launcher"/>




android:id="@+id/chatlist_tv_left"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:background="@drawable/pop_left"

android:gravity="center"

android:padding="20dp"/>







chatlist_right.xml






android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="right|bottom"

android:orientation="horizontal"

android:padding="10dp">




android:id="@+id/chatlist_tv_right"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginRight="20dp"

android:background="@drawable/pop_right"

android:gravity="center"

android:padding="20dp"/>




android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginRight="20dp"

android:src="@mipmap/ic_launcher"/>







OK,别忘了这是一个新的listview,所以我们还得写一个实体类

ChatListBean



packagecom.lgl.wechatlist.bean;



/

对话实体类



@authorLGL



/

publicclassChatListBean{



//指定方向

privateinttype;

//文本

privateStringvalue;



publicintgetType(){

returntype;

}



publicvoidsetType(inttype){

this.type=type;

}



publicStringgetValue(){

returnvalue;

}



publicvoidsetValue(Stringvalue){

this.value=value;

}

}



这样就对我们的adapter进行分析了

ChatListAdapter



packagecom.lgl.wechatlist.adapter;



importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.TextView;



importcom.lgl.wechatlist.R;

importcom.lgl.wechatlist.bean.ChatListBean;



importjava.util.List;



/

对话ListView

/

publicclassChatListAdapterextendsBaseAdapter{



publicstaticfinalStringKEY="key";

publicstaticfinalStringVALUE="value";



publicstaticfinalintVALUE_LEFT_TEXT=1;

publicstaticfinalintVALUE_RIGHT_TEXT=2;

privateLayoutInflatermInflater;



privateListmyList;



publicChatListAdapter(Contextcontext,ListmyList){

this.myList=myList;



mInflater=(LayoutInflater)context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



}



@Override

publicintgetCount(){

returnmyList.size();

}



@Override

publicObjectgetItem(intarg0){

returnmyList.get(arg0);

}



@Override

publiclonggetItemId(intarg0){

returnarg0;

}



@Override

publicViewgetView(intposition,ViewconvertView,ViewGrouparg2){



ChatListBeanmsg=myList.get(position);

inttype=getItemViewType(position);

ViewHolderRightTextholderRightText=null;

ViewHolderLeftTextholderLeftText=null;



if(convertView==null){

switch(type){

//左边

caseVALUE_LEFT_TEXT:

holderLeftText=newViewHolderLeftText();

convertView=mInflater.inflate(R.layout.chatlist_left,null);

holderLeftText.btnLeftText=(TextView)convertView

.findViewById(R.id.chatlist_tv_left);

holderLeftText.btnLeftText.setText(msg.getValue());

convertView.setTag(holderLeftText);

break;

//右边

caseVALUE_RIGHT_TEXT:

holderRightText=newViewHolderRightText();

convertView=mInflater.inflate(R.layout.chatlist_right,null);

holderRightText.btnRightText=(TextView)convertView

.findViewById(R.id.chatlist_tv_right);

holderRightText.btnRightText.setText(msg.getValue());

convertView.setTag(holderRightText);

break;

}



}else{

switch(type){

caseVALUE_LEFT_TEXT:

holderLeftText=(ViewHolderLeftText)convertView.getTag();

holderLeftText.btnLeftText.setText(msg.getValue());

break;

caseVALUE_RIGHT_TEXT:

holderRightText=(ViewHolderRightText)convertView.getTag();

holderRightText.btnRightText.setText(msg.getValue());

break;

}



}

returnconvertView;

}



/

根据数据源的position返回需要显示的的layout的type



type的值必须从0开始

/

@Override

publicintgetItemViewType(intposition){



ChatListBeanmsg=myList.get(position);

inttype=msg.getType();

returntype;

}



/

返回所有的layout的数量

/

@Override

publicintgetViewTypeCount(){

return7;

}



//左边的文本

classViewHolderLeftText{

privateTextViewbtnLeftText;

}



//右边的文本

classViewHolderRightText{

privateTextViewbtnRightText;

}



}



我们去主类中写点数据

packagecom.lgl.wechatlist;



importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.ListView;



importcom.lgl.wechatlist.adapter.ChatListAdapter;

importcom.lgl.wechatlist.bean.ChatListBean;



importjava.util.ArrayList;

importjava.util.List;



/

CreatedbyLGLon2016/5/7.

/

publicclassQQActivityextendsAppCompatActivityimplementsView.OnClickListener{





//会话数据源

privateListListData;

//会话Adapter

privateChatListAdapterchatListAdapter;

//会话列表

privateListViewmListView;

//消息

privateStringmessage;

//按钮

privateButtonbtn_left,btn_right;

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_qq);

mListView=(ListView)findViewById(R.id.mListView);

btn_left=(Button)findViewById(R.id.btn_left);

btn_left.setOnClickListewww.shanxiwang.netner(this);

btn_right=(Button)findViewById(R.id.btn_right);

btn_right.setOnClickListener(this);



ListData=newArrayList();

ChatListBeanchatListBean=newChatListBean();

chatListBean.setType(ChatListAdapter.VALUE_LEFT_TEXT);

chatListBean.setValue("你好!");

ListData.add(chatListBean);



chatListAdapter=newChatListAdapter(this,ListData);

mListView.setAdapter(chatListAdapter);

}







@Override

publicvoidonClick(Viewv){

switch(v.getId()){

caseR.id.btn_left:

listLeft("left");

break;

caseR.id.btn_right:

listRight("right");

break;

}

}

/

显示列表左边



@paramtext

/

privatevoidlistLeft(Stringtext){

ChatListBeanleft=newChatListBean();

left.setType(ChatListAdapter.VALUE_LEFT_TEXT);

left.setValue(text);

ListData.add(left);

chatListAdapter.notifyDataSetChanged();

//滚动到最底部

mListView.setSelection(mListView.getBottom());

}



/

显示右边列表



@paramtext

/

privatevoidlistRight(Stringtext){

ChatListBeanright=newChatListBean();

right.setType(ChatListAdapter.VALUE_RIGHT_TEXT);

right.setValue(text);

ListData.add(right);

chatListAdapter.notifyDataSetChanged();

//滚动到最底部

mListView.setSelection(mListView.getBottom());

}

}



好的运行一下



到这里,我们就对这个技巧有点熟悉了吧,既然如此,那我们即系,现在我们有6个item,分别是文字左右,图片左右,语言左右,这里就不贴出来了,要看的直接去Demo里面找哟,也没多少东西,就几个文本布局而已,我们直接来看实体类

MessageBean



packagecom.lgl.wechatlist.bean;



publicclassMessageBean{



privateinttype;//指定是哪种类型

privateStringvalue;//值



publicintgetType(){

returntype;

}



publicvoidsetType(inttype){

this.type=type;

}



publicStringgetValue(){

returnvalue;

}



publicvoidsetValue(Stringvalue){

this.value=value;

}

}



你一看,和上次那个没什么不同,对的,是没什么不同,只不过代码多了一点而已,这样的话,我们可以看Adapter了

packagecom.lgl.wechatlist.adapter;



importandroid.content.Context;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.Button;

importandroid.widget.ImageView;

importandroid.widget.TextView;



importcom.lgl.wechatlist.R;

importcom.lgl.wechatlist.bean.MessageBean;



importjava.util.List;



/

比原来的多了getItemViewType和getViewTypeCount这两个方法,



/

publicclassWechatAdapterextendsBaseAdapter{



publicstaticfinalStringKEY="key";

publicstaticfinalStringVALUE="value";



publicstaticfinalintVALUE_LEFT_TEXT=1;

publicstaticfinalintVALUE_LEFT_IMAGE=2;

publicstaticfinalintVALUE_LEFT_AUDIO=3;

publicstaticfinalintVALUE_RIGHT_TEXT=4;

publicstaticfinalintVALUE_RIGHT_IMAGE=5;

publicstaticfinalintVALUE_RIGHT_AUDIO=6;

privateLayoutInflatermInflater;



privateListmyList;



publicWechatAdapter(Contextcontext,ListmyList){

this.myList=myList;



mInflater=(LayoutInflater)context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}



@Override

publicintgetCount(){

returnmyList.size();

}



@Override

publicObjectgetItem(intarg0){

returnmyList.get(arg0);

}



@Override

publiclonggetItemId(intarg0){

returnarg0;

}



@Override

publicViewgetView(intposition,ViewconvertView,ViewGrouparg2){



MessageBeanmsg=myList.get(position);

inttype=getItemViewType(position);

ViewHolderRightTextholderRightText=null;

ViewHolderRightImgholderRightImg=null;

ViewHolderRightAudioholderRightAudio=null;

ViewHolderLeftTextholderLeftText=null;

ViewHolderLeftImgholderLeftImg=null;

ViewHolderLeftAudioholderLeftAudio=null;



if(convertView==null){

switch(type){

//左边

caseVALUE_LEFT_TEXT:

holderLeftText=newViewHolderLeftText();

convertView=mInflater.inflate(R.layout.list_item_left_text,

null);

holderLeftText.ivLeftIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderLeftText.btnLeftText=(Button)convertView

.findViewById(R.id.btn_left_text);

holderLeftText.btnLeftText.setText(msg.getValue());

convertView.setTag(holderLeftText);

break;



caseVALUE_LEFT_IMAGE:

holderLeftImg=newViewHolderLeftImg();

convertView=mInflater.inflate(R.layout.list_item_left_iamge,

null);

holderLeftImg.ivLeftIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderLeftImg.ivLeftImage=(ImageView)convertView

.findViewById(R.id.iv_left_image);

holderLeftImg.ivLeftImage.setImageResource(R.mipmap.ic_launcher);

convertView.setTag(holderLeftImg);

break;



caseVALUE_LEFT_AUDIO:

holderLeftAudio=newViewHolderLeftAudio();

convertView=mInflater.inflate(R.layout.list_item_left_audio,

null);

holderLeftAudio.ivLeftIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderLeftAudio.btnLeftAudio=(Button)convertView

.findViewById(R.id.btn_left_audio);

holderLeftAudio.tvLeftAudioTime=(TextView)convertView

.findViewById(R.id.tv_left_audio_time);

holderLeftAudio.tvLeftAudioTime.setText(msg.getValue());

convertView.setTag(holderLeftAudio);

break;

//右边

caseVALUE_RIGHT_TEXT:

holderRightText=newViewHolderRightText();

convertView=mInflater.inflate(R.layout.list_item_right_text,

null);

holderRightText.ivRightIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderRightText.btnRightText=(Button)convertView

.findViewById(R.id.btn_right_text);

holderRightText.btnRightText.setText(msg.getValue());

convertView.setTag(holderRightText);

break;



caseVALUE_RIGHT_IMAGE:

holderRightImg=newViewHolderRightImg();

convertView=mInflater.inflate(R.layout.list_item_right_iamge,

null);

holderRightImg.ivRightIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderRightImg.ivRightImage=(ImageView)convertView

.findViewById(R.id.iv_right_image);

holderRightImg.ivRightImage.setImageResource(R.mipmap.ic_launcher);

convertView.setTag(holderRightImg);

break;



caseVALUE_RIGHT_AUDIO:

holderRightAudio=newViewHolderRightAudio();

convertView=mInflater.inflate(R.layout.list_item_right_audio,

null);

holderRightAudio.ivRightIcon=(ImageView)convertView

.findViewById(R.id.iv_icon);

holderRightAudio.btnRightAudio=(Button)convertView

.findViewById(R.id.btn_right_audio);

holderRightAudio.tvRightAudioTime=(TextView)convertView

.findViewById(R.id.tv_right_audio_time);

holderRightAudio.tvRightAudioTime.setText(msg.getValue());

convertView.setTag(holderRightAudio);

break;



default:

break;

}



}else{

switch(type){

caseVALUE_LEFT_TEXT:

holderLeftText=(ViewHolderLeftText)convertView.getTag();

holderLeftText.btnLeftText.setText(msg.getValue());

break;

caseVALUE_LEFT_IMAGE:

holderLeftImg=(ViewHolderLeftImg)convertView.getTag();

holderLeftImg.ivLeftImage.setImageResource(R.mipmap.ic_launcher);

break;

caseVALUE_LEFT_AUDIO:

holderLeftAudio=(ViewHolderLeftAudio)convertView.getTag();

holderLeftAudio.tvLeftAudioTime.setText(msg.getValue());

break;

caseVALUE_RIGHT_TEXT:

holderRightText=(ViewHolderRightText)convertView.getTag();

holderRightText.btnRightText.setText(msg.getValue());

break;

caseVALUE_RIGHT_IMAGE:

holderRightImg=(ViewHolderRightImg)convertView.getTag();

holderRightImg.ivRightImage.setImageResource(R.mipmap.ic_launcher);

break;

caseVALUE_RIGHT_AUDIO:

holderRightAudio=(ViewHolderRightAudio)convertView.getTag();

holderRightAudio.tvRightAudioTime.setText(msg.getValue());

break;



default:

break;

}



//holder=(ViewHolder)convertView.getTag();

}

returnconvertView;

}



/

根据数据源的position返回需要显示的的layout的type



type的值必须从0开始



/

@Override

publicintgetItemViewType(intposition){



MessageBeanmsg=myList.get(position);

inttype=msg.getType();

returntype;

}



/

返回所有的layout的数量



/

@Override

publicintgetViewTypeCount(){

return7;

}



classViewHolderRightText{

privateImageViewivRightIcon;//右边的头像

privateButtonbtnRightText;//右边的文本

}



classViewHolderRightImg{

privateImageViewivRightIcon;//右边的头像

privateImageViewivRightImage;//右边的图像

}



classViewHolderRightAudio{

privateImageViewivRightIcon;//右边的头像

privateButtonbtnRightAudio;//右边的声音

privateTextViewtvRightAudioTime;//右边的声音时间

}



classViewHolderLeftText{

privateImageViewivLeftIcon;//左边的头像

privateButtonbtnLeftText;//左边的文本

}



classViewHolderLeftImg{

privateImageViewivLeftIcon;//左边的头像

privateImageViewivLeftImage;//左边的图像

}



classViewHolderLeftAudio{

privateImageViewivLeftIcon;//左边的头像

privateButtonbtnLeftAudio;//左边的声音

privateTextViewtvLeftAudioTime;//左边的声音时间

}



}

OK,代码清晰可见



我们的主类

packagecom.lgl.wechatlist;



importandroid.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.View;

importandroid.widget.ListView;



importcom.lgl.wechatlist.adapter.WechatAdapter;

importcom.lgl.wechatlist.bean.MessageBean;



importjava.util.ArrayList;

importjava.util.List;





publicclassWechatActivityextendsAppCompatActivity{



privateListViewlvData;

privateListmsgList;

privateMessageBeanmsg;

privateWechatAdapteradapter;



@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_wechat);



lvData=(ListView)findViewById(R.id.lv_data);



msgList=newArrayList();



adapter=newWechatAdapter(WechatActivity.this,msgList);



lvData.setAdapter(adapter);

}



/

左边文字



@paramv

/

publicvoidtv_left(Viewv){

MessageBeanmsg=newMessageBean();

msg.setType(WechatAdapter.VALUE_LEFT_TEXT);

msg.setValue("我是文字左");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}



/

右边文字



@paramv

/

publicvoidtv_right(Viewv){

MessageBeanmsg=newMessageBean();

msg.setType(WechatAdapter.VALUE_RIGHT_TEXT);

msg.setValue("我是文字右");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}



/

左边图片



@paramv

/

publicvoidiv_left(Viewv){

MessageBeanmsg=newMessageBean();

msg.setType(WechatAdapter.VALUE_LEFT_IMAGE);

msg.setValue("我是图片左");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}



/

右边图片



@paramv

/

publicvoidiv_right(Viewv){

msg=newMessageBean();

msg.setType(WechatAdapter.VALUE_RIGHT_IMAGE);

msg.setValue("我是图片右");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}



/

左边语音



@paramv

/

publicvoidiv_left_audio(Viewv){

msg=newMessageBean();

msg.setType(WechatAdapter.VALUE_LEFT_AUDIO);

msg.setValue("16s");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}



/

右边语音



@paramv

/

publicvoidiv_right_audio(Viewv){

msg=newMessageBean();

msg.setType(WechatAdapter.VALUE_RIGHT_AUDIO);

msg.setValue("6s");

msgList.add(msg);

adapter.notifyDataSetChanged();

//滑动到底部

lvData.setSelection(lvData.getBottom());

}





}

那这样的话,我们运行一下



行,我们是不是已经有了大致的了解,我Demo也理得比较顺,要是看的不是很懂可以结合Demo来

献花(0)
+1
(本文系网络学习天...首藏)