Android ListViewAdapter OnClickListener触发器点击两个位置到十点

时间:2015-09-06 19:33:47

标签: android position onclicklistener listview-adapter

在ListViewAdapter中使用OnClickListener时,我得到了奇怪的结果。 一切都按照应有的方式运作。位置正确分配 - 0,1,2,3 ...... 16,17,18 ......

每个位置都有自己的OnClickListener按钮。

现在,当我点击某个位置的按钮,例如位置2时,将触发两个事件,位置2和位置12。 如果单击第5个按钮,则第5个和第15个位置正在进行事件。 如果是18日,那么18日和8日。等等。

为什么?这是代码:

 @Override
 public View getView(final int position, View cell, ViewGroup parent) {
 final Holder holder;
 if (cell == null){
 holder = new Holder();
 ........
 cell.setTag(holder);
 }
 else{
 holder = (Holder)cell.getTag();
 } 

 holder.mainButton1.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    .....
      }  
   });
  return cell;
}

2 个答案:

答案 0 :(得分:0)

如您所知,重用单元格列表可优化内存使用情况。 您可能没有删除旧的侦听器。这个错误总是在滚动时或滚动后?

答案 1 :(得分:0)

我假设短语“事件将被触发”事件是对listview中的视图项的一些更改 你看,listview中的视图被回收了 如果您的屏幕最多可包含10个列表视图项,则只会创建10个视图 因此,首先您会看到1-10个视图,然后是2-11个视图,然后是3-12个视图,但视图的创建仅在步骤1-10视图中。 第11个元素将具有第1个视图,但根据您的代码具有不同的内容(因此第1个和第11个项目共享相同的视图)
所以你改变第一项如改变背景,那么这个改变将留给第11项。

所以也许你应该禁用回收或以某种方式重置回收的视图