1、复杂ListView的展示
聊天模块其实就是一个复杂的ListView,在数据适配器中,从application中获取到当前登录的用户,与聊天消息中的from参数进行比较,如果两者相同则说明是自己发送的消息,那么ListView中就显示发送消息的布局,否则显示接收消息的布局。适配器的代码如下:
/**
* 聊天消息的适配器
*
* @author ZHY
*
*/
public class ChartMessageAdapter extends ArrayAdapter<QQMessage> {
ImApp app;
public ChartMessageAdapter(Context context, List<QQMessage> objects) {
super(context, 0, objects);
Activity activity = (Activity) context;
app = (ImApp) activity.getApplication();
}
/**
* 根据集合中的position位置,返回不同的值,代表不同的布局 0代表自己发送的消息 1代表接收到的消息
*
*/
@Override
public int getItemViewType(int position) {// 这个方法是给getView用得
QQMessage msg = getItem(position);
// 消息来自谁,如果消息来自我自己,说明是我发送的
if (msg.from == app.getMyAccount()) {
// 我自己的消息,发送
return 0;
} else {
return 1;
}
}
/**
* 两种布局
*/
@Override
public int getViewTypeCount() {
return 2;
}
class ViewHolder {
TextView time;
TextView content;
ImageView head;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
if (0 == type) {
// 发送的布局
ViewHolder holder;
if (convertView == null) {
convertView =