/*
模仿IM聊天布局
*/
public class ChatActivity extends AppCompatActivity {
private ListView mListView;
//自定义聊天信息类
List<ChatMessage> mChatMessages = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view_demo);
//聊天信息
ChatMessage chatMessage = new ChatMessage(1, 2, "刘小明", "8:20", "你好吗", "", "", true);
ChatMessage chatMessage2 = new ChatMessage(2, 1, "小军", "8:21", "我很好", "", "", false);
ChatMessage chatMessage3 = new ChatMessage(1, 2, "刘小明", "8:22", "今天天气怎么样", "", "", true);
ChatMessage chatMessage4 = new ChatMessage(2, 1, "小军", "8:23", "热成狗了", "", "", false);
mChatMessages.add(chatMessage);
mChatMessages.add(chatMessage2);
mChatMessages.add(chatMessage3);
mChatMessages.add(chatMessage4);
//匹配适配器
mListView.setAdapter(new ChatMessageAdapter(this, mChatMessages));
}
//聊天信息适配器
public static class ChatMessageAdapter extends BaseAdapter {
//区分信息类型来区分是对方还是自己发的消息
public interface IMessageViewType {
int COM_MESSAGE = 0;
int TO_MESSAGE = 1;
}
private List<ChatMessage> mChatMessages;
private LayoutInflater mInflater;
//适配器构造函数
public ChatMessageAdapter(Context context, List<ChatMessage> coll) {
this.mChatMessages = coll;
mInflater = LayoutInflater.from(context);//加载布局资源
}
//返回ListView中要显示的子View数量,也就是下载任务数,只要返回构造方法中的list的条目就可以了
public int getCount() {
return mChatMessages.size();
}
//返回一个子View,即ListView中的一个子条目,当然你也可以自定义返回你想要的信息
public Object getItem(int position) {
return mChatMessages.get(position);
}
//根据ListView中的位置返回id
public long getItemId(int position) {
return position;
}
//获取项目视图类型(左or右气泡)
public int getItemViewType(int position) {
ChatMessage entity = mChatMessages.get(position);//实体
//取类型
if (entity.getMsgType()) {
return IMessageViewType.COM_MESSAGE;//返回接口中定义的常量 0
} else {
return IMessageViewType.TO_MESSAGE;// 1
}
}
//获取视图类型的数量
public int getViewTypeCount() {
return 2;
}
//返回这个条目的整个信息,它是一个单独的布局文件
public View getView(int position, View convertView, ViewGroup parent) {
final ChatMessage entity = mChatMessages.get(position);
boolean isComMsg = entity.getMsgType();//用于判断
ViewHolder viewHolder;
if (convertView == null) {
//先判断再解析对应布局文件资源到convertView
if (isComMsg) {
//如果is come message 是true,则是对方发送的消息,显示是左气泡
convertVi
ListView实现聊天框
最新推荐文章于 2021-11-27 06:00:00 发布
本文将详细介绍如何在Android中使用ListView组件来实现一个聊天界面。通过自定义适配器、设置不同布局来展示发送和接收的消息,以及优化滚动性能等技巧,让你轻松创建出功能完善的聊天应用。
摘要由CSDN通过智能技术生成