0

因为我的 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);

它奏效了

4

1 回答 1

0

我认为您的错误是,您不使用 LayoutInflater。你试一试:

    LayoutInflater inflater =  (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.yourListViewItemLayout, parent,false);

    final Checkbox yourCheckBox = (CheckBox)view.findViewById(R.id.yourCheckBoxId);
             yourCheckBox.setOnCheckedChangeListener......

这应该工作

于 2013-01-03T19:18:54.597 回答