只选择一个复选框

时间:2011-01-30 17:05:54

标签: android checkbox

我有多个复选框,但我希望用户只选择一个复选框。我尝试if-else语句,但它不可用。所以,我想知道,怎么样。

由于

8 个答案:

答案 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
        }

enter image description here

答案 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
        }
    }