Java 在android中单击主复选框时,如何选择所有复选框?

Java 在android中单击主复选框时,如何选择所有复选框?,java,android,android-studio,checkbox,Java,Android,Android Studio,Checkbox,我需要选择主复选框,所有其他部分复选框也被选中 我的要求是,我有一个复选框selectAll和一些其他复选框,通过单击此selectAll复选框,必须选中所有其他复选框。当单击部分复选框时,selectAll复选框的选择必须消失 selectAllCheckbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {

我需要选择主复选框,所有其他部分复选框也被选中

我的要求是,我有一个复选框selectAll和一些其他复选框,通过单击此selectAll复选框,必须选中所有其他复选框。当单击部分复选框时,selectAll复选框的选择必须消失

 selectAllCheckbox.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                CheckBox cb = (CheckBox) view;
                isPartial = true;
                splitItemAdapter.selectAllItem(cb.isChecked());
                if (isFromCashPayment) {
                    if (cb.isChecked()) {
                      selectAllCheckbox.setChecked(true);
                      isitemChecked = true;




                    } else {

                        selectAllCheckbox.setChecked(false);

                        isitemChecked = false;



                    }
                }
            }
        });

你可以用这种方式。首先,所有复选框必须在一个布局中。然后使用这个代码块

layout.xml

...
 <CheckBox android:id="@+id/allCheckbox" />
 <LinearLayout android:id="@+id/checkboxLayouts"...>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>

               <CheckBox  android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>
</LinearLayout>
...
。。。
...
代码

LinearLayout checkboxLayout=findviewbyd(R.id.checkboxLayouts);
setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
对于(int i=0;i

注意:我不能检查代码。很抱歉出现语法错误。

使用此演示kotlin代码签出逻辑

        checkBox1.setOnClickListener {
            if (checkBox2.isChecked) {
                selectAllCheckbox.isChecked = true
            }

            if (!checkBox2.isChecked || !checkBox1.isChecked) {
                selectAllCheckbox.isChecked = false
            }
        }
        checkBox2.setOnClickListener {
            if (checkBox1.isChecked) {
                selectAllCheckbox.isChecked = true
            }
            if (!checkBox1.isChecked || !checkBox2.isChecked) {
                selectAllCheckbox.isChecked = false
            }
        }
        selectAllCheckbox.setOnClickListener {
            if (selectAllCheckbox.isChecked) {
                checkBox1.isChecked = true
                checkBox2.isChecked = true
            }
            if (!selectAllCheckbox.isChecked) {
                checkBox1.isChecked = false
                checkBox2.isChecked = false
            }
        }
您可以尝试以下代码:

一次创建

        parent = findViewById(R.id.parent_checkbox);
        child1 = findViewById(R.id.child_checkbox_1);
        child2 = findViewById(R.id.child_checkbox_2);

        parent.setOnCheckedChangeListener(this);
        child1.setOnCheckedChangeListener(this);
        child2.setOnCheckedChangeListener(this);
一旦改变

@Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkCheckBox(buttonView);
    }
复选框方法

public void checkCheckBox(View view){
     if (parent.isChecked() && view.getId() == R.id.parent_checkbox){
         child1.setChecked(true);
         child2.setChecked(true);
     }
     else if (!parent.isChecked() && view.getId() == R.id.parent_checkbox){
         if (child1.isChecked() && child2.isChecked()){
             child1.setChecked(false);
             child2.setChecked(false);
         }
     }
     else if (!parent.isChecked()){
         if (child1.isChecked() && child2.isChecked()){
             parent.setChecked(true);
         }
     }
     else if (parent.isChecked() && !child1.isChecked() || !child2.isChecked()){
         parent.setChecked(false);
     }
    }

选择所有复选框功能的实现如下,代码在Kotlin语言中更简单:

private val checkboxes by lazy {
    listOf(
        checkbox1,
        checkbox2,
        checkbox3,
        checkboxX
    )
}

// can implement the CompoundButton.OnCheckedChangeListener on an Activity or Fragment instead
private val onCheckedChangeListener = CompoundButton.OnCheckedChangeListener { button, isChecked ->
    if (!buttonView.isPressed)
        // note that this breaks when accessibility mode is enabled,
        // e.g. isPressed() returns false e.g. when the event is triggered by a double tap from voice assistant.
        return

    when(buttonView.id) {
        R.id.checkboxSelectAll -> {
            checkboxes.forEach { it.isChecked = isChecked }
        }
        else -> {
            if (isChecked && checkboxes.all { it.isChecked }) {
                checkboxSelectAll.isChecked = true
            } else if (!isChecked && checkboxSelectAll.isChecked) {
                checkboxSelectAll.isChecked = false
            }
        }
    }
}

// assume this code is within an Activity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.your_activity)

    checkboxSelectAll.setOnCheckedChangeListener(onCheckedChangeListener);
    checkboxes.forEach { it.setOnCheckedChangeListener(onCheckedChangeListener) }
}

*请注意,此解决方案不适用于支持可访问性所需的应用。

您遇到的问题是什么?单击“全部部分”复选框后,主复选框中没有选择项。您还必须添加“部分上的setOnClickListener”复选框,并循环通过“全部”复选框并更新selectAllCheckbox。如果(cb.isChecked()){selectAllCheckbox.setChecked(true)}是多余的。cb是selectAllCheckbox我希望您能得到答案。:)这不是我的要求。我有一个主复选框和几个部分复选框。单击所有部分复选框,主复选框也会自动选中。
private val checkboxes by lazy {
    listOf(
        checkbox1,
        checkbox2,
        checkbox3,
        checkboxX
    )
}

// can implement the CompoundButton.OnCheckedChangeListener on an Activity or Fragment instead
private val onCheckedChangeListener = CompoundButton.OnCheckedChangeListener { button, isChecked ->
    if (!buttonView.isPressed)
        // note that this breaks when accessibility mode is enabled,
        // e.g. isPressed() returns false e.g. when the event is triggered by a double tap from voice assistant.
        return

    when(buttonView.id) {
        R.id.checkboxSelectAll -> {
            checkboxes.forEach { it.isChecked = isChecked }
        }
        else -> {
            if (isChecked && checkboxes.all { it.isChecked }) {
                checkboxSelectAll.isChecked = true
            } else if (!isChecked && checkboxSelectAll.isChecked) {
                checkboxSelectAll.isChecked = false
            }
        }
    }
}

// assume this code is within an Activity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.your_activity)

    checkboxSelectAll.setOnCheckedChangeListener(onCheckedChangeListener);
    checkboxes.forEach { it.setOnCheckedChangeListener(onCheckedChangeListener) }
}