简体   繁体   English

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

[英]How to select all checkboxes, while clicking the main checkbox in android?

I need selecting the main checkbox, the all other partial checkboxes also selected我需要选择主复选框,所有其他部分复选框也被选中

My Requirement is ,I have a checkbox selectAll and some other checkboxes,by clicking this selectAll checkbox ,all other checkboxes must selected.And while clicking the partial checkbox the selectAll checkbox selection must gone.我的要求是,我有一个复选框 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;



                    }
                }
            }
        });

You can use this way.您可以使用这种方式。 Firstly, all checkbox to be in one layout.首先,所有复选框都在一个布局中。 And then you use this code block.然后你使用这个代码块。

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>
...

Code代码

LinearLayout checkboxLayout = findViewById(R.id.checkboxLayouts);

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
       for(int i=0 ; i < checkboxLayout.getChildCount(); i++) {
          if(checkboxLayout.getChildAt(i) instanceof CheckBox) {
             ((CheckBox) checkboxLayout.getChildAt(i)).setChecked(isChecked);
          }
       }
 }
});

Note: I can't check code.注意:我无法检查代码。 Sorry for syntax error.抱歉语法错误。

You can try this code:你可以试试这个代码:

OnCreate在创建

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

OnCheckChanged OnCheckChanged

@Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        checkCheckBox(buttonView);
    }

checkCheckBox Method复选框方法

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

Checkout the logic with this demo kotlin code...使用此演示 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
            }
        }

The implementation of Select All Checkboxes function is as below, the code is simpler in Kotlin language: Select All Checkboxes 函数的实现如下,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) }
}

*Note that this solution is not working for apps that are required to support accessibility. *请注意,此解决方案不适用于支持辅助功能所需的应用程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM