关于android listView

scjunjun 发布于 2013/07/23 16:27
阅读 219
收藏 0

在listView列表中有一个ImageView  和TextView等 在适配器给imageView设置点击事件 当点击imagView是图片变成蓝色

问题是我点击imageView以后当前点击的变蓝了 但是 后面没隔一个就变蓝了  why !!!!!

加载中
0
李天然
李天然
adapter 里面放个数据容器,图片样式资源存数据容器里,getview的时候去取数据容器数据更新页面,每次做操作都是改变数据容器,例如ArrayList和HashMap的组合作为数据容器,listview的item view是复用的,数据可以每次改变,改变之后,调用通知数据改变接口就ok了。
scjunjun
scjunjun
后来我也是这么做的 吧变色了图片的地址放容器里 滚地的时候判断容器里有没有 有的话就变色 没有就不变色
0
chenbilly
chenbilly
没代码 说什么?
scjunjun
scjunjun
帮我看看吧
scjunjun
scjunjun
加进来了
0
loki_lan
loki_lan
public View getView(int position, View convertView, ViewGroup parent) { 


// TODO Auto-generated method stub 
ListItemView listItemView = null; 
if (convertView == null) { 
convertView = listContainer.inflate(itemViewResource, null); 
listItemView = new ListItemView(); 
listItemView.showDate = (TextView) convertView.findViewById(R.id.show_date); 
listItemView.title = (TextView) convertView.findViewById(R.id.home_title); 
listItemView.likeImageview = (ImageView) convertView.findViewById(R.id.like_imageview); 
listItemView.picture = (ImageView) convertView.findViewById(R.id.picture); 
listItemView.author = (TextView) convertView.findViewById(R.id.author); 
listItemView.praiseCount = (TextView) convertView.findViewById(R.id.praise_count); 
// 设置控件集合到convertView 
convertView.setTag(listItemView); 
} 
else { 
listItemView = (ListItemView) convertView.getTag(); 
} 
Party party = listItems.get(position); 
listItemView.showDate.setText(party.getPartDate()); 
listItemView.title.setText(party.getPartyTitle()); 
listItemView.author.setText(party.getPartyOrganizer()); 
listItemView.picture.setOnClickListener(imageOnClickListener); 
listItemView.praiseCount.setText(String.valueOf(party.getCommentCount() + party.getLikeCount())); 
Log.i("TAGA", "getThumbnail_img=" + party.getThumbnail_IMG()); 
ImageManager2.from(context).displayImage(listItemView.picture, StringUtils.filterUrl(party.getThumbnail_IMG()), R.drawable.p1984553217, 250, 
250); 
listItemView.likeImageview.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) { 

// TODO Auto-generated method stub 
if (v instanceof ImageView) { 
final ImageView img = (ImageView) v; 
final Party party = (Party) v.getTag(); 
// TODO Auto-generated method stub 
final Handler handler = new Handler() { 


public void handleMessage(Message msg) { 


if (msg.what == 1) { 
Result res = (Result) msg.obj; 
Log.i("TAG", "flag=" + res.getFlag()); 
if (res.getFlag() == 0) { 
Toast.makeText(context, res.getError(), Toast.LENGTH_LONG).show(); 
} 
else if (res.getFlag() == 1) { 
Toast.makeText(context, res.getSuccess(), Toast.LENGTH_LONG).show(); 
img.setImageResource(R.drawable.praise_ico_x); 
// count.setTextColor(context.getResources().getColor(R.color.deep_blue)); 
} 
} 
}; 
}; 
new Thread() { 


public void run() { 


Message msg = new Message(); 
try { 
Result result = ac.getLikeResult(party.getPartyID(), "281"); 
msg.what = 1; 
msg.obj = result; 
} 
catch (AppException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
e.printStackTrace(); 
msg.what = -1; 
msg.obj = e; 
} 
handler.sendMessage(msg); 


}; 
}.start(); 
} 
} 
}); 
listItemView.likeImageview.setTag(party); 
return convertView; 
}
scjunjun
scjunjun
哦哦 !!!!!!
scjunjun
scjunjun
怎么做到的啊
loki_lan
loki_lan
回复 @scjunjun : 编辑器里面有个插入代码,不然格式不好看,别人都不想帮你的。
scjunjun
scjunjun
thank you
0
fneg
fneg
去掉缓存
scjunjun
scjunjun
我知道了 每次点击图标的时候把 url放到list中 当listView滚动时 再去判断图片是否有对应的url, 有的会就变色 没有就不变色 唉!
scjunjun
scjunjun
去掉缓存 但是滚地一下 图标又变回原来的颜色了
scjunjun
scjunjun
用tag标识可以吗
fneg
fneg
回复 @scjunjun : 正确性都保证不了,就暂时不要考虑性能问题了
scjunjun
scjunjun
这样会会影响滑动速度吧
0
chenbilly
chenbilly
去掉 tag 后 可不可以了?
scjunjun
scjunjun
listView复用了 去掉也没用
0
徐庆-neo
徐庆-neo

这个问题貌似源自于代码,如果 @scjunjun 在适配器的 getView 中去定制 ImageView 的 OnClickListener,所使用的 getView 第一个参数最好设置成 final。

比如:

public View getView(final int position, View view, ViewGroup parent) {
	// [Neo] ...
	xx.setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			list.get(position);
			// [Neo] ...
		}
	}
}
ps: 直接在 getView 内部写变量,或者使用成员变量存储这个 position 就会出现与题目描述类似的问题
返回顶部
顶部