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.
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
@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...
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:
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.