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的获取缓存操作。先谢谢各位解答.

Android

可怕的仙贝 11 years, 10 months ago

http://blog.csdn.net/aomandeshangxiao/article/details/7681380
看一下我写的这个博客吧,解决了这个问题。

拿根棒棒捅死他 answered 11 years, 10 months ago

Your Answer