ListView展示多布局的方法和网上的都差不多,显示也没有问题,但是当长按删除的时候就会发生当前item删除后,下一个item会变成删除的item的布局。后来发现是因为我没有重写 getItemViewType()和getViewTypeCount()两个方法,重写后问题就解决了。
问题原因是删除item后缓存的convertView没有更新,下一个item使用已删除item所在position缓存的convertView,造成布局混乱。重写getItemViewType()和getViewTypeCount()两个方法就是告诉ListView检查当前position的item应该使用的布局。
@Override
public int getItemViewType(int position) {
return PushMsgType.getIndexOfType(msgList.get(position).getMessageType());
}
@Override
public int getViewTypeCount() {
return 4;
}
......
String msgType = PushMsgType.getStringOfIndex(getItemViewType(position));
//加载布局
if (convertView == null) {
switch (msgType) {
case PushMsgType.STRING:
sysNotifyHolder = new SysNotifyHolder();
convertView = mInflater.inflate(R.layout.chat_sys_notify_msg_item, null);
......
break;
......
}
}else{
......
}
......
//加载数据
switch (msgType) {
case PushMsgType.MessageTypeOrderCanRob:
......
break;
......
}
return convertView;