因为我的 listView/List 项目有复选框,所以我有问题,当我滚动列表时,复选框被选中或取消选中。因此,例如,我需要跟踪 ArrayList 中的已检查项目。因此,我在每个复选框上添加了一个 OnCheckedChangeListener,并在列表视图的自定义适配器的“getView”中添加了侦听器。
现在,由于每个复选框都会对单击做出反应,因此我遇到了以下问题。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (!MainActivity.getSharedInstance().getIsCheckedArray().contains(tasks.get(MainActivity.ID)))
MainActivity.getSharedInstance().getIsCheckedArray().add(tasks.get(MainActivity.ID));
for (String i : MainActivity.getSharedInstance().getIsCheckedArray()) {
Log.i("RUN", i);
}
} else {
if (MainActivity.getSharedInstance().getIsCheckedArray().contains(tasks.get(MainActivity.ID)))
MainActivity.getSharedInstance().getIsCheckedArray().remove(tasks.get(MainActivity.ID));
for (String i : MainActivity.getSharedInstance().getIsCheckedArray()) {
Log.i("RUN", i);
}
}
}
});
从每个列表项中,我都有一个自己的 ID,我可以使用该 ID 访问该项目。但是当我点击复选框获取 ID 时,我只得到一个项目的 ID(最后一个项目)。当我单击其他复选框时,它们会对更改做出反应,但我只从最后一项而不是从最后一项之前的项目中获取 ID。
当我总是创建新的监听器时,我会覆盖监听器吗?
更新: 没关系,我将此添加到 onCheckChangeListener
String curIndex = tasks.get(MainActivity.ID);
它奏效了