在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;
}
答案 0 :(得分:0)
如您所知,重用单元格列表可优化内存使用情况。 您可能没有删除旧的侦听器。这个错误总是在滚动时或滚动后?
答案 1 :(得分:0)
我假设短语“事件将被触发”事件是对listview中的视图项的一些更改
你看,listview中的视图被回收了
如果您的屏幕最多可包含10个列表视图项,则只会创建10个视图
因此,首先您会看到1-10个视图,然后是2-11个视图,然后是3-12个视图,但视图的创建仅在步骤1-10视图中。
第11个元素将具有第1个视图,但根据您的代码具有不同的内容(因此第1个和第11个项目共享相同的视图)
所以你改变第一项如改变背景,那么这个改变将留给第11项。
所以也许你应该禁用回收或以某种方式重置回收的视图