滚动后Android失去了检查状态

时间:2017-07-26 07:41:11

标签: android listview scroll android-viewholder

每当向上和向下滚动时,我都会失去复选框的检查状态。

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

请帮帮我

这是我的代码。

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;
}

详细说明对我来说非常愉快。

我必须解决这个问题。

感谢您收看我的帖子。

2 个答案:

答案 0 :(得分:2)

无论何时滚动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;
                    }
                }
            });

答案 1 :(得分:1)

滚动时,会调用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;
                }
            }
        });