在滚动检查框中,在RecyclerView中未选中或反之亦然

时间:2017-12-29 08:58:12

标签: android checkbox android-recyclerview

我在RecyclerView适配器的查看项目中有一个复选框 滚动时,会检查一些复选框,有些复选框未经检查 我从thisthis获得了帮助 但我无法找到确切的解决方案。

这是我的代码

if-elseif

例如,我检查了列表中的1,2,3项。当我向下滚动并上升时,则检查13并且2与其他项目一起取消选中。请帮助我。

任何解决方案都表示赞赏。

3 个答案:

答案 0 :(得分:0)

通知您的适配器。

 holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            phoneContactsModel.setChecked(b);
           //notifyItemChanged(position);(if you want to notify change in single item)
           //or
           //notifyDataSetChanged();(if you want to notify change in all) 

        }
    });

无需使用此行代码两次

    holder.checkBox.setSelected(phoneContactsModel.isChecked());

//此部分似乎有些错误我假设您要在选中复选框时将项目添加到列表中,并在取消选中复选框时将其从列表中删除。

  holder.contactLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (phoneContactsModel.isChecked()) {
                    holder.checkBox.setSelected(false);
                    copyOfListOfContacts.remove(listOfContacts.get(position));

                } else {
                    holder.checkBox.setSelected(true);
                    copyOfListOfContacts.add(listOfContacts.get(position));

                }
            }
        }

);

答案 1 :(得分:0)

简单的方法是不要使用OnCheckedChangeListener只在复选框上设置OnClickListener。在 ViewHolder 类中移动checkBox onclick。

 public class ViewHolder1 extends RecyclerView.ViewHolder implements View.OnClickListener {
    CheckBox checkBox;
    public ViewHolder1(View itemView) {
        super(itemView);
        checkBox = (TextView) itemView.findViewById(R.id.checkBox);
        checkBox.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        if(getAdapterPosition()!=-1) {
            phoneContactsModel.get(getAdapterPosition()).setChecked(!phoneContactsModel.get(getAdapterPosition()).isChecked());
            notifyItemChanged(getAdapterPosition());
        }
    }
}

并且

public void onBindViewHolder(final AllContactsAdapter.ViewHolder holder, final int position) {
    holder.checkBox.setChecked(phoneContactsModel.isChecked());
}

答案 2 :(得分:0)

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

        final PhoneContactsModel phoneContactsModel = listOfContacts.get(position);
        holder.name.setText(phoneContactsModel.getContactName());
        holder.phoneNumber.setText(phoneContactsModel.getContactNumber());
        holder.checkBox.setChecked(/* gets value from the modal */ phoneContactsModel.isChecked());

        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean value) {

                if (compoundButton.isPressed()) {
                    holder.checkBox.setChecked(value);
                    // set the value into the modal.
                    phoneContactsModel.setChecked(value);
                    if (value) {
                        copyOfListOfContacts.remove(phoneContactsModel);
                    } else {
                        copyOfListOfContacts.add(phoneContactsModel);
                    }
                }
            }
        });
    }

像这样更改onBindViewHolder方法。不会有任何不必要的检查。