安卓复选框的问题------多个选项,选第一个则控制不能选择其他项目,选其他则不能选择第一项

来源:互联网 发布:万合天宜工作体验 知乎 编辑:程序博客网 时间:2024/05/17 21:42

要求:



如图所示:当选择无症状是,不能点击其他复选框,当点击其他复选框时,不能选择无症状。

实现起来逻辑要清楚。


main.xml

//主要的XML实现自适应

<LinearLayout
                style="@style/layout_vertical"
                android:layout_weight="5"
                android:orientation="vertical" >


                <TextView
                    style="@style/layout_vertical"
                    android:layout_weight="0.6"
                    android:background="@color/followup_tipbackground"
                    android:text="1.您最近有什么症状?"
                    android:textColor="@color/followup_tipword"
                    android:textSize="@dimen/tilletextsize" />


                <TableLayout
                    style="@style/layout_vertical"
                    android:layout_weight="1.38"
                    android:orientation="vertical" >


                    <TableRow
                        style="@style/layout_horizontal"
                        android:layout_weight="1"
                        android:orientation="horizontal" >


                        <CheckBox
                            android:id="@+id/cb1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="无症状" />


                        <CheckBox
                            android:id="@+id/cb2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="头痛头晕 " />


                        <CheckBox
                            android:id="@+id/cb3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="恶心呕吐 " />
                    </TableRow>


                    <TableRow
                        style="@style/layout_horizontal"
                        android:layout_weight="1"
                        android:orientation="horizontal" >


                        <CheckBox
                            android:id="@+id/cb4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="眼花耳鸣 " />


                        <CheckBox
                            android:id="@+id/cb5"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="呼吸困难 " />


                        <CheckBox
                            android:id="@+id/cb6"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="心悸胸闷  " />
                    </TableRow>


                    <TableRow
                        style="@style/layout_horizontal"
                        android:layout_weight="1"
                        android:orientation="horizontal" >


                        <CheckBox
                            android:id="@+id/cb7"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="鼻衄出血不止 " />


                        <CheckBox
                            android:id="@+id/cb8"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="四肢发麻 " />


                        <CheckBox
                            android:id="@+id/cb9"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_weight="1"
                            android:textSize="@dimen/followup_content"
                            android:text="下肢水肿 " />
                    </TableRow>


                    <RelativeLayout
                        style="@style/layout_horizontal"
                        android:layout_weight="1"
                        android:orientation="horizontal" >


                        <CheckBox
                            android:id="@+id/cb10"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textSize="@dimen/followup_content"
                            android:text="其他 " />


                        <EditText
                            android:id="@+id/cb_other"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_toRightOf="@id/cb10"
                            android:singleLine="true"
                            android:textSize="@dimen/followup_content"
                            android:visibility="invisible" />
                    </RelativeLayout>
                </TableLayout>
            </LinearLayout>

  mainActivity.JAVA

public void viewFindById() {

cb1 = (CheckBox) findViewById(R.id.cb1);
cb2 = (CheckBox) findViewById(R.id.cb2);
cb3 = (CheckBox) findViewById(R.id.cb3);
cb4 = (CheckBox) findViewById(R.id.cb4);
cb5 = (CheckBox) findViewById(R.id.cb5);
cb6 = (CheckBox) findViewById(R.id.cb6);
cb7 = (CheckBox) findViewById(R.id.cb7);
cb8 = (CheckBox) findViewById(R.id.cb8);
cb9 = (CheckBox) findViewById(R.id.cb9);
cb10 = (CheckBox) findViewById(R.id.cb10);
cb_other = (EditText) findViewById(R.id.cb_other);


}

public void viewSetOnClick() {

cb1.setOnClickListener(symptomTextchecklistener);
cb2.setOnClickListener(symptomTextchecklistener);
cb3.setOnClickListener(symptomTextchecklistener);
cb4.setOnClickListener(symptomTextchecklistener);
cb5.setOnClickListener(symptomTextchecklistener);
cb6.setOnClickListener(symptomTextchecklistener);
cb7.setOnClickListener(symptomTextchecklistener);
cb8.setOnClickListener(symptomTextchecklistener);
cb9.setOnClickListener(symptomTextchecklistener);
cb10.setOnClickListener(symptomTextchecklistener);

}

//主要实现过程

private OnClickListenersymptomTextchecklistener = new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView txt = (TextView) v;

switch (txt.getId()) {
case R.id.cb1:
if(
symptomNum==0)//声明一个int型变量symptomNum(也可以是其他类型)作为标示符,                                                               //这个很重要,其实这个if并没有意义,可以不用在这里判断symptomNum==0

                                                             //因为正确的逻辑是:如果cb1可以被选则(case R.id.cb1成立),那么                                                                        //symptonNum就必须为0
{
if(cb1.isChecked())
{                                          //如果cb1被选中了,那么其他复选框不可以被选中
symptomText.append("1");
cb2.setClickable(false);
cb3.setClickable(false);
cb4.setClickable(false);
cb5.setClickable(false);
cb6.setClickable(false);
cb7.setClickable(false);
cb8.setClickable(false);
cb9.setClickable(false);
cb10.setClickable(false);
}
else
{                                      //如果cb1被取消选中,那么其他复选框恢复可以被多选
cb2.setClickable(true);
cb3.setClickable(true);
cb4.setClickable(true);
cb5.setClickable(true);
cb6.setClickable(true);
cb7.setClickable(true);
cb8.setClickable(true);
cb9.setClickable(true);
cb10.setClickable(true);
}
}
break;
caseR.id.cb2:                    //以cb2为例,此处case R.id.cb2的意思是你对cb2已经做了动作,第
if(cb2.isChecked())    //一次肯定是选中的动作,第二次肯定是取消选中的动作,总之case中
{                                                                  //就只有这两种可能
symptomText.append("2"+"|");
symptomNum++;
cb1.setClickable(false);             //每个case中的每个if中都必须有这句话:翻译为:如                                                                                                 //果除cb1意外的复选框被选中的话,则cb1不可以被选中
}
else{                                        //else很重要,千万不要天真的认为else是代表cb2未选中哦!
--symptomNum;               //其实else代表的是取消选中该复选框
}
if(symptomNum==0){              //这段也很重要哦原因在于必须在点击cb1之前判断,是否可                                                                                           //    以点击cb1,即symptomNum是否为0
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}

break;
case R.id.cb3:

if(cb3.isChecked())
{
symptomText.append("3"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb4:

if(cb4.isChecked())
{
symptomText.append("4"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb5:

if(cb5.isChecked())
{
symptomText.append("5"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb6:

if(cb6.isChecked())
{
symptomText.append("6"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb7:

if(cb7.isChecked())
{
symptomText.append("7"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb8:
if(cb8.isChecked())
{
symptomText.append("8"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb9:
if(cb9.isChecked())
{
symptomText.append("9"+"|");
symptomNum++;
cb1.setClickable(false);
}
else{
--symptomNum;
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
case R.id.cb10:
if(cb10.isChecked())
{  
symptomNum++;
cb1.setClickable(false);
cb_other.setVisibility(v.VISIBLE);
}else
{      --symptomNum;
cb_other.setVisibility(v.INVISIBLE);
symptomText.append("99"+"|");
}
if(symptomNum==0){
cb1.setClickable(true);
}
else{
cb1.setClickable(false);
}
break;
default:
Log.e("num", String.valueOf(symptomNum));
break;

}
Log.e("num", String.valueOf(symptomNum));
}

};




原创粉丝点击