Android 滚动后检查状态丢失

Android lost of check state after scrolling

每当上下滚动时,我都会丢失复选框的选中状态。

我这两天都解决不了这个问题......

请帮帮我

这是我的代码。

public View getView(final int position, View view, ViewGroup parent) {

    context = parent.getContext();

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    if (view == null) {

        holder = new ViewHolder();

        view = inflater.inflate(R.layout.custom_llistview, parent, false);

        holder.img_view = (ImageView) view.findViewById(R.id.custom_imageView);
        holder.txt_view = (TextView) view.findViewById(R.id.custom_textView);
        holder.checkbox = (CheckBox) view.findViewById(R.id.check_box);

        view.setTag(holder);
    }
    else {
        holder = (ViewHolder)view.getTag();

    }

    holder.checkbox.setChecked(check_flag_arr[position]);

    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {

                check_flag_arr[position] = isChecked;
            else {
                check_flag_arr[position] = isChecked;
            }
        }
    });

    file_path = list_item.get(position).getFile_path();
    Bitmap showImage = BitmapFactory.decodeFile(file_path);

    holder.img_view.setImageBitmap(showImage);

    list_contents = file_path.substring(45, 65);
    holder.txt_view.setText(list_contents);

    return view;
}

详细的解释将是我的荣幸。

我必须解决这个问题。

感谢观看我的post。

每当您滚动时调用 setOnCheckedChangeListener

删除 setOnCheckedChangeListener 并实施 setOnClickListener

holder.checkbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    if (holder.checkbox.isChecked()) {
                         check_flag_arr[position] = true;
                    } else {
                        check_flag_arr[position] = false;
                    }
                }
            });

滚动时调用 setOnCheckedChangeListener。因此,要在获取视图中处理该问题,您需要执行以下操作 -

holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(_songs.get(position).isSelected());

您首先需要设置 onchecked null,以便在填充视图和分配视图时在滚动时不调用 onCheckedListener。

然后你需要调用OnCheckedChangeListener

 holder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (holder.checkbox.isChecked()) {
                     check_flag_arr[position] = true;
                } else {
                    check_flag_arr[position] = false;
                }
            }
        });