listview item 事件响 改变组件属性值问题(附图说明)
问题:首先我在listView的item上放上了一些组件(例如button),然后我对item上组件进行设置监听事件,事件是在adapter里面设定的。代码如下:
@Override
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
//RecentViewHolder holder;
if(view == null){
holder = new RecentViewHolder();
view = mInflater.inflate(R.layout.item_today_list, null);
//findViewById
holder.mXXxxx = (XXXXX) view.findViewById(R.id.XXXXXX);
....
....
//设置响应(自定义函数)
setItemOnClick(holder);
//标记Tag
view.setTag(holder);
}else{
holder = (RecentViewHolder) view.getTag();
}
//设置响应(自定义函数)如下:
private void setItemOnClick(final RecentViewHolder holder){
holder.XXXX.setOnClickListener(new View.OnClickListener() {
boolean onClickFlag = true;
@Override
public void onClick(View v) {
if(onClickFlag){
//注意,这里对item里的组件进行改变属性的属性值
holder.XXXX.setVisibility(View.VISIBLE);
}else{
//注意,这里对item里的组件进行改变属性的属性值
holder.XXXXX.setVisibility(View.GONE);
}
onClickFlag = !onClickFlag;
}
});
holder.YYYYY.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
....
....
}
});
......
}
描述到了这里,问题是:
由于使用了setTag对view进行缓存,然后对组件的操作时(当listView多屏时),事件响应出现问题。
例如:对第一屏的listView的第一个item的组件操作时,第二屏同一位置的item也会同时响应
个人判断:第二屏的item是缓存里get出来的(getTag)两个屏幕同一个位置使用的对象是用一个对象
问题个人觉得是出在:
if(onClickFlag){
//注意,这里对item里的组件进行改变属性的属性值
holder.XXXX.setVisibility(View.VISIBLE);
}else{
//注意,这里对item里的组件进行改变属性的属性值
holder.XXXXX.setVisibility(View.GONE);
}
holder使用的是同一个对象。
上图再次描述:
理想状态:点击某个item的组件时不影响其他组件的响应,保留getTag的获取缓存操作。先谢谢各位解答.
可怕的仙贝
11 years, 10 months ago
Answers
http://blog.csdn.net/aomandeshangxiao/article/details/7681380
看一下我写的这个博客吧,解决了这个问题。
拿根棒棒捅死他
answered 11 years, 10 months ago