关于listView不同数据类型的加载


在聊天界面中需要使用到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的类型)这部分代码进行理解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值