一个左右分布的聊天气泡 listview, adapter 哪里出了问题?

2014-12-01 20:22:38 +08:00
 Registering
继承自BaseAdapter的adapter,,出现问题是,列表滑动时,结点有时在左边有时在右边,虽然知道listview中的item是回收复用的,但是感觉还是没有透彻理解,,代码如下:


@Override
public View getView(int position, View convertView, ViewGroup parent) {

ListItemView listItemView = null;
if (convertView == null) {
listItemView = new ListItemView();
if (listData.get(Postion).getSide == RIGHT) {
convertView = listContainer.inflate(RIGHT_LAYOUT_RES, null);
listItemView.commentMenberPhoto = (ImageView) convertView.findViewById(R.id.comment_right);
/****/
} else {
convertView = listContainer.inflate(LEFT_LAYOUT_RES, null);
listItemView.commentMenberPhoto = (ImageView) convertView.findViewById(R.id.comment_left);
/****/
}
}
convertView.setTag(listItemView);
} else {
listItemView = (ListItemView) convertView.getTag();
}

/**初始化部分控件的数据**/

}
3214 次点击
所在节点    程序员
9 条回复
kooze
2014-12-01 23:11:58 +08:00
else 里也判断该position 下 getSide() 的值 重新设置view。但是这样失去了复用的意义了。建议搞两个listItemView 对象。
a0000
2014-12-01 23:37:12 +08:00
覆写getTypeCount (好像是这个,记不清啥名了) return 2
Registering
2014-12-02 00:32:33 +08:00
@a0000 未遂
aWangami
2014-12-02 00:35:48 +08:00
这部分代码看不出什么问题来呀
hounychang
2014-12-02 08:54:05 +08:00
现在不要用这样的adapter了,费劲,共享你个好用的。https://github.com/hounychang/BaseAdapter 刚共享到Github上,去看看吧
Registering
2014-12-02 09:29:58 +08:00
@a0000 @aWangami @hounychang @kooze

已经解决,结合两个方法:getItemViewType()以及getViewTypeCount()。
aWangami
2014-12-02 23:06:53 +08:00
@Registering 因为什么导致的?
LittleMK
2014-12-07 23:32:19 +08:00
需要重写getItemViewType()以及getViewTypeCount()。
在getView中调用getItemViewType(position)来判断具体呈现哪个layout
Registering
2014-12-07 23:44:55 +08:00
@LittleMK exactily ! 前几天我就是这样解决的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/150742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX