Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android复选框列表视图回收导致意外的复选框检查_Java_Android_Listview_Android Listview - Fatal编程技术网

Java Android复选框列表视图回收导致意外的复选框检查

Java Android复选框列表视图回收导致意外的复选框检查,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我正在开发一个应用程序,它使用一个带有简单自定义适配器的ListView,每行包含一个CheckBox对象。但是,由于ListView的回收功能(我不打算关闭该功能),当选中任何一个框时,ListView中位于下方或上方的其他框也会被选中 以下是适配器中的mygetView(),以及自定义的ViewHolder类: public View getView(final int position, View convertView, ViewGroup parent) { ViewHolde

我正在开发一个应用程序,它使用一个带有简单自定义适配器的ListView,每行包含一个CheckBox对象。但是,由于ListView的回收功能(我不打算关闭该功能),当选中任何一个框时,ListView中位于下方或上方的其他框也会被选中

以下是适配器中的mygetView(),以及自定义的ViewHolder类:

public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.populate_friends_row, null);
        holder = new ViewHolder();
        holder.nameCheckBox = (CheckBox) convertView.findViewById(R.id.isFriend);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.nameCheckBox.setText(data.get(position).contactLabel);
    holder.nameCheckBox.setChecked(checked.get(position));
    holder.nameCheckBox.setTag(String.valueOf(position));   // to properly track the actual position
    holder.nameCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            int pos = Integer.parseInt(buttonView.getTag().toString());
            checked.set(pos, isChecked);
        }

    });

    return convertView;
}

public static class ViewHolder {
    public CheckBox nameCheckBox;
}
我已经拿着布尔数组列表中的复选框:选中


如果您有任何帮助,我们将不胜感激。

当您致电
holder.nameCheckBox.setChecked(checked.get(position))
若要配置要为此视图显示的视图,将在标记仍具有上一个复选框的位置时调用侦听器


在调用
setChecked

之前,请尝试删除侦听器(将其设置为
null
),是否有特殊原因使复选框的标记使用
String
而不是
Integer