我有多个复选框,但我希望用户只选择一个复选框。我尝试if-else语句,但它不可用。所以,我想知道,怎么样。
由于
答案 0 :(得分:11)
为什么不使用Radio Buttons呢?它们的意思正是为了这个。
但是如果您坚持使用复选框,请修改选中任何复选框的事件,以便在选中它时禁用其他复选框。
答案 1 :(得分:2)
我做到了:
public void check_checkbox(){
int CB_count=0;
if (CB_1.isChecked()) {
CB_count=CB_count+1;
}if (CB_2.isChecked()) {
CB_count=CB_count+1;
}if (CB_3.isChecked()) {
CB_count=CB_count+1;}
if (CB_count == 1) {
//do your magic
} else {
Toast.makeText(getActivity(), "you only can select 1 checkbox", Toast.LENGTH_SHORT).show();
}
}
我在onCreateView =
上进行了改进CB_1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
CB_2.setChecked(false);
CB_3.setChecked(false);
}
}
});
CB_2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
CB_1.setChecked(false);
CB_3.setChecked(false);
}
}
});
CB_3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
CB_2.setChecked(false);
CB_1.setChecked(false);
}
}
});
答案 2 :(得分:0)
我这样做了:
- 在我的布局中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alignmentMode="alignBounds"
android:columnCount="1"
android:background="#ff99f6ff"
>
<ImageView
android:id="@+id/escudo"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal|fill_vertical"
android:src="@drawable/dicon2"
android:contentDescription="foto logo"
android:layout_marginTop="30dp"
android:layout_alignParentTop="false"
android:layout_centerInParent="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="top"
android:layout_below="@+id/radioGroup"
android:layout_centerHorizontal="true"
android:layout_marginTop="48dp" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/radioGroup"
android:orientation="horizontal"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="34dp"
android:gravity="center_horizontal"
android:checkedButton="1"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_a"
android:id="@+id/checkBoxA"
android:layout_above="@+id/escudo"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="onCheckboxClicked" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_b"
android:id="@+id/checkBoxB"
android:layout_alignTop="@+id/checkBoxA"
android:layout_toRightOf="@+id/checkBoxA"
android:layout_toEndOf="@+id/checkBoxA"
android:onClick="onCheckboxClicked"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_c"
android:id="@+id/checkBoxC"
android:layout_alignTop="@+id/checkBoxB"
android:layout_toRightOf="@+id/checkBoxB"
android:layout_toEndOf="@+id/checkBoxB"
android:onClick="onCheckboxClicked"/>
</RadioGroup>
</RelativeLayout>
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
public class MainActivity extends ActionBarActivity {
private CheckBox checkBoxA, checkBoxB, checkBoxC;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkBoxA = (CheckBox) findViewById(R.id.checkBoxA);
checkBoxB = (CheckBox) findViewById(R.id.checkBoxB);
checkBoxC = (CheckBox) findViewById(R.id.checkBoxC);
}
public void onCheckboxClicked(View view) {
switch(view.getId()) {
case R.id.checkBoxA:
checkBoxB.setChecked(false);
checkBoxC.setChecked(false);
break;
case R.id.checkBoxB:
checkBoxC.setChecked(false);
checkBoxA.setChecked(false);
break;
case R.id.checkBoxC:
checkBoxA.setChecked(false);
checkBoxB.setChecked(false);
break;
}
}
}
答案 3 :(得分:0)
建议改用单选按钮,但由于我必须遵循设计,所以我像使用Kotlin那样做。
单击复选框时覆盖setOnClickListener
,取消选中其他复选框
driver_check_box.setOnClickListener() {
driver_check_box.isChecked = true
station_check_box.isChecked = false
broadcast_check_box.isChecked = false
}
station_check_box.setOnClickListener {
driver_check_box.isChecked = false
station_check_box.isChecked = true
broadcast_check_box.isChecked = false
}
broadcast_check_box.setOnClickListener {
driver_check_box.isChecked = false
station_check_box.isChecked = false
broadcast_check_box.isChecked = true
}
答案 4 :(得分:0)
对于Kotlin,我设法做到了。
示例
首先在您的对象中存储isChecked值
data class OptionsDetails(val optionName: String, var isChecked: Boolean = false)
然后,如果您将recyclerview与多个CheckBox一起使用,则只需检查您刚刚按下的对象即可
inner class OptionRemoveViewHolder(itemView: View) : BaseViewHolder<OptionsDetails>(itemView) {
override fun bind(item: OptionsDetails, position: Int) {
itemView.checkBox.setOnCheckedChangeListener(null)
itemView.item_name.text = item.optionName
itemView.checkBox.isChecked = item.isChecked
itemView.setOnClickListener {
itemView.checkBox.isChecked = !itemView.checkBox.isChecked
}
itemView.checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
itemClickListener.onCheckBoxClickListener(position)
}
}
}
在这里,我有一个界面,该界面将在我的视图中用于与该复选框的点击进行交互,然后在我的视图中,我将当前未选中的其他复选框置为假,并仅将true传递给isChecked
我已经按下的对象。
override fun onCheckBoxClickListener(position:Int) {
for((index,value) in optionList.withIndex()){
value.isChecked = position == index
}
adapter.notifyDataSetChanged()
}
就这样,您可以一次选中一个复选框
答案 5 :(得分:0)
使用 setoncliklistener
gdA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gdAB.setChecked(false);
gdB.setChecked(false);
gdO.setChecked(false);
}
});
gdB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gdA.setChecked(false);
gdAB.setChecked(false);
gdO.setChecked(false);
}
});
gdAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gdA.setChecked(false);
gdB.setChecked(false);
gdO.setChecked(false);
}
});
答案 6 :(得分:0)
最简单的方法。
第 1 步
chkEnglish.setOnClickListener(checkboxListener);
chkFrench.setOnClickListener(checkboxListener);
第 2 步
View.OnClickListener checkboxListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v == chkEnglish){
chkEnglish.setChecked(true);
chkFrench.setChecked(false);
} else if (v == chkFrench){
chkFrench.setChecked(true);
chkEnglish.setChecked(false);
}
}
};
答案 7 :(得分:0)
val checkBoxList = mutableListOf<CheckBox>()
checkBoxList.add(...)
checkBoxList.forEach {
it.setOnCheckedChangeListener { buttonView, isChecked ->
checkBoxList.forEach {
it.isChecked = false
}
it.isChecked = isChecked
}
}