[英]How to select all checkboxes, while clicking the main checkbox in android?
我需要選擇主復選框,所有其他部分復選框也被選中
我的要求是,我有一個復選框 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;
}
}
}
});
您可以使用這種方式。 首先,所有復選框都在一個布局中。 然后你使用這個代碼塊。
布局文件
...
<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 = 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);
}
}
}
});
注意:我無法檢查代碼。 抱歉語法錯誤。
你可以試試這個代碼:
在創建
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);
}
復選框方法
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 代碼檢查邏輯...
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
}
}
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) }
}
*請注意,此解決方案不適用於支持輔助功能所需的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.