在聊天界面中需要使用到lisview来填充聊天对话,这个时候聊天内容不仅仅包括文字,还会有图片甚至是发红包之类的。这个时候就需要考虑vietype 了。
0.
创建两个viewtype对应的类,我这里用到的是 文字和图片对应的viewtype
public class TextMessage { private String text; public TextMessage(String content) { this.text = content; } public String getText() { return text; } }
public class ImageMessage { private int imageResId; public ImageMessage(int imageResId) { this.imageResId = imageResId; } public int getImageResId() { return imageResId; } }
1.
private interface ViewType { int TEXT = 0; int IMAGE = 1; }2.
@Override public int getItemViewType(int position) { if (getItem(position) instanceof TextMessage) { return ViewType.TEXT; } else { return ViewType.IMAGE; } } @Override public int getViewTypeCount() { return ViewTypeCount; }3.
@Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); if (getItemViewType(position) == ViewType.TEXT) { if (convertView == null) { convertView = layoutInflater.inflate(R.layout.text_message_item, parent, false); } TextView textView = (TextView) convertView.findViewById(R.id.message_content); TextMessage textMessage = (TextMessage) messageList.get(position); textView.setText(textMessage.getText()); } else { if (convertView == null) { convertView = layoutInflater.inflate(R.layout.image_message_item, parent, false); } ImageView imageView = (ImageView) convertView.findViewById(R.id.message_image); ImageMessage imageMessage = (ImageMessage) messageList.get(position); imageView.setImageResource(imageMessage.getImageResId()); } return convertView; }4.
MessageAdapter adapter = new MessageAdapter(messages); listView.setAdapter(adapter);
重点是对数据源此时的数据类型(viewtype的类型)这部分代码进行理解!