Java 在android中单击主复选框时,如何选择所有复选框?
我需要选择主复选框,所有其他部分复选框也被选中 我的要求是,我有一个复选框selectAll和一些其他复选框,通过单击此selectAll复选框,必须选中所有其他复选框。当单击部分复选框时,selectAll复选框的选择必须消失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) {
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) }
}