安卓复选框的问题------多个选项,选第一个则控制不能选择其他项目,选其他则不能选择第一项
来源:互联网 发布:万合天宜工作体验 知乎 编辑:程序博客网 时间: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));
}
};
- 安卓复选框的问题------多个选项,选第一个则控制不能选择其他项目,选其他则不能选择第一项
- 小功能:下拉框里为不同的7天,复选框里为旅游点,每一天可以选择多个旅游点,每一天已选择的点其他天不能选,切换下拉框,当天选择好的点为以勾选状态
- ExtJS4 ComboBox选择第一个选项时不能触发select事件的处理
- 显示复选框选择的内容--如何读取多个选项(asp)
- 兄弟选择器——用于选择除第一个元素外的其他兄弟元素
- iOS App Development 第一个选项呈灰色不能选问题.
- 通过Ajax动态生成的页面,解决复选框,选择一次不能再选择的问题
- 实现多个下拉框同一批option,选中其一其他框里去除选中的项(不可选择已选过的项)--js
- 多个复选框中选择2个后触发
- EasyUI 之 下拉框默认选择第一个选项
- 复选框全选与至少选择一项
- 怎样让复选框只能选择一项
- js 实现复选框只能选择一项
- 让非模态对话框像模态对话框一样,没有处理完就不能选择其他的对话框
- 使用jQuery多个复选框选择/取消
- select readonly 不能看到其他选项解决方案
- 解决android安卓TabHost默认进入第一个选项卡onCreate的问题.顺序问题
- WPF TreeView选择一项时,其他同级项折叠
- glReadPixels
- 总结一些Objective-C的self.用法
- 学习JAVA应该去的20个英文网站(java学习网站)
- cocos2d-x ——菜单层(CCMenuItemToggle)五
- 入住CSDN
- 安卓复选框的问题------多个选项,选第一个则控制不能选择其他项目,选其他则不能选择第一项
- uploadify 2.1.0 java spring mvc 2003版excel 附件上传
- ubuntu12.04安装svn 1.7
- tesseract-ocr 3.02 信心值 字符坐标 学习笔记
- 二叉树的遍历(层遍历和深度遍历)
- TOMCAT下短信平台部署步骤
- DAY4
- java面试题1
- Android Handler机制