zoukankan      html  css  js  c++  java
  • 4.5消费券采购列表 —多选项CheckBox的应用

    4.5消费券采购列表

    多选项CheckBox的应用

    目录

    4.5消费券采购列表多选项CheckBox的应用... 1

    目标:1

    方法:1

    原始代码:1

    缺点分析:3

    改进思路:3

    改进代码:3

    效果:6

     

    目标:设计三个CheckBox,选中其中的后用TextView显示出选择结果.

    方法:CheckBox设置setOnCheckedChangeListener监听器.

    原始代码:

    package irdc.EX04_05;

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.CheckBox;

    import android.widget.CompoundButton;

    import android.widget.TextView;

    publicclass EX04_05 extends Activity

    {

      /*声明对象变量*/

      private TextView mTextView1;

      private CheckBox mCheckBox1;

      private CheckBox mCheckBox2;

      private CheckBox mCheckBox3;

      /** Called when the activity is first created. */

      @Override

      publicvoid onCreate(Bundle savedInstanceState)

      {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        /*透过findViewById取得TextView对象并调整文字内容*/

        mTextView1 = (TextView) findViewById(R.id.myTextView1);

        mTextView1.setText("你所选择的项目有: ");

        /*透过findViewById取得三个CheckBox对象*/

        mCheckBox1=(CheckBox)findViewById(R.id.myCheckBox1);

        mCheckBox2=(CheckBox)findViewById(R.id.myCheckBox2);

        mCheckBox3=(CheckBox)findViewById(R.id.myCheckBox3);

        /*设定OnCheckedChangeListener给三个CheckBox对象*/

        mCheckBox1.setOnCheckedChangeListener(mCheckBoxChanged);

        mCheckBox2.setOnCheckedChangeListener(mCheckBoxChanged);

        mCheckBox3.setOnCheckedChangeListener(mCheckBoxChanged);

        }

      /*声明并建构onCheckedChangeListener对象*/

      private CheckBox.OnCheckedChangeListener mCheckBoxChanged =

        new CheckBox.OnCheckedChangeListener()

      {

        /*implement onCheckedChanged方法*/

        @Override

        publicvoid onCheckedChanged(

            CompoundButton buttonView, boolean isChecked) {

          // TODO Auto-generated method stub

          /*透过getString()取得CheckBox的文字字符串*/

          String str0="所选的项目为: ";

          String str1=getString(R.string.str_checkbox1);

          String str2=getString(R.string.str_checkbox2);

          String str3=getString(R.string.str_checkbox3);

          String plus=";";

          String result="但是超过预算啰!!";

          String result2="还可以再多买几本喔!!";

          /*任一CheckBox被勾选后,CheckBox的文字会改变TextView的文字内容 * 三个对象总共八种情境*/

          if(mCheckBox1.isChecked()==true & mCheckBox2.isChecked()==true & mCheckBox3.isChecked()==true)

          {

            mTextView1.setText(str0+str1+plus+str2+plus+str3+result);

            }

          elseif(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==true & mCheckBox3.isChecked()==true)

            {

              mTextView1.setText(str0+str2+plus+str3+result);

              }

            elseif(mCheckBox1.isChecked()==true & mCheckBox2.isChecked()==false & mCheckBox3.isChecked()==true)

              {

                mTextView1.setText(str0+str1+plus+str3+result);

                }

              else  if(mCheckBox1.isChecked()==true & mCheckBox2.isChecked()==true & mCheckBox3.isChecked()==false)

                {

                  mTextView1.setText(str0+str1+plus+str2+result); }

                elseif(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==false & mCheckBox3.isChecked()==true)

                  {

                    mTextView1.setText(str0+str3+plus+result2);

                    }

                  elseif(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==true & mCheckBox3.isChecked()==false)

                    {

                      mTextView1.setText(str0+str2);

                      }

                    elseif(mCheckBox1.isChecked()==true & mCheckBox2.isChecked()==false & mCheckBox3.isChecked()==false)

                      { mTextView1.setText(str0+str1); }

                      elseif(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==false & mCheckBox3.isChecked()==false)

                      { mTextView1.setText(str0);

                      }

          }

          };

          }

    缺点分析:条件语句过于冗长,难看,难修改.

    改进思路:

    对各种状况进行编码,使用switch语句,使结构清晰易懂,易于维护.

    /*对所有情况进行编码

                       * 编码表

                       * 权值 100    10     1   /

                       *      flag1 flag2  falg3 total

                       *      0      0      0      0

                       *      0      0      1      1

                       *      0      1      0      10

                       *      0      1      1      11

                       *      1      0      0      100

                       *      1      0      1      101

                       *      1      1      0      110

                       *      1      1      1      111

                       * */

    改进代码:

    (使用条件表达式替代if else赋值.)

    package edu.cquptzx.MutiCheckBox;

     

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.CheckBox;

    import android.widget.CompoundButton;

    import android.widget.TextView;

     

    publicclass MutiCheckBoxActivity extends Activity {

        private TextView tv;

        private CheckBox cb1,cb2,cb3;

        private String str1,str2,str3 ,str_BR,str_NULLBILL;

        privateintflag1 = 0,flag2 = 0,flag3 = 0 , total = 0 ;

        /** Called when the activity is first created. */

        @Override

        publicvoid onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

           

            //根据ID找到对象;

            tv = (TextView)findViewById(R.id.listBill);

            cb1 = (CheckBox) findViewById(R.id.checkBox1);

            cb2 = (CheckBox) findViewById(R.id.checkBox2);

            cb3 = (CheckBox) findViewById(R.id.checkBox3);

           

            str1 = getString(R.string.item_1);

            str2 = getString(R.string.item_2);

            str3 = getString(R.string.item_3);

            str_BR = getString(R.string.str_BR);

            str_NULLBILL = getString(R.string.str_NULLBILL);

           

            tv.setText(str_NULLBILL);

           

            CheckBox.OnCheckedChangeListener cblistener = new CheckBox.OnCheckedChangeListener ()

                {

                  publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked)

                  {

     

                       /*对所有情况进行编码

                       * 编码表

                       * 权值 100    10     1   /

                       *      flag1 flag2  falg3 total

                       *      0      0      0      0

                       *      0      0      1      1

                       *      0      1      0      10

                       *      0      1      1      11

                       *      1      0      0      100

                       *      1      0      1      101

                       *      1      1      0      110

                       *      1      1      1      111

                       * */

                      flag1 = (cb1.isChecked()==true) ? 100 : 0;

                      flag2 = (cb2.isChecked()==true) ? 10 : 0;

                      flag3 = (cb3.isChecked()==true) ? 1 : 0;

                     

                       /*

                        if(cb1.isChecked()) 

                      {

                         flag1 = 100;

                      }

                      else

                      {

                         flag1 = 0;

                      }

                     

                       if(cb2.isChecked())  

                       {

                        flag2 = 10;

                       }

                       else

                       {

                        flag2 = 0;

                       }

                      

                       if(cb3.isChecked())

                       {

                        flag3 = 1 ;

                       }

                       else

                       {

                        flag3 = 0;

                       }

                        */

                       total = flag1 + flag2 + flag3 ;

                      

                       switch(total)

                       {

                          case 0 :

                          tv.setText(str_NULLBILL);

                          break;

                          case 1:

                          tv.setText(str3);

                          break;

                          case 10 :

                          tv.setText(str2);

                          break;

                          case 11 :

                          tv.setText(str2 + str_BR + str3);

                          break;

                          case 100:

                          tv.setText(str1);

                          break;

                          case 101:

                          tv.setText(str1 + str_BR + str3);

                          break;

                          case 110:

                          tv.setText(str1 + str_BR + str2);

                          break;

                          case 111:

                          tv.setText(str1 + str_BR + str2 + str_BR + str3);

                          break;

                          default:

                          break;

                       }                 

                  }          

                };          

             cb1.setOnCheckedChangeListener(cblistener);

             cb2.setOnCheckedChangeListener(cblistener);

             cb3.setOnCheckedChangeListener(cblistener);     

        }

    }

    效果:

    效果

    For more questions , contacts me by :

    cquptzx@qq.com or  cquptzx@outlook.com

     

  • 相关阅读:
    使用POI读写Word doc文件
    用纯css改变下拉列表select框的默认样式
    深入探究JFreeChart
    arcgis api for javascript中使用proxy.jsp
    【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页
    iText5报表_页眉与页脚
    JFreeChart柱状图单组柱子的不同颜色显示
    如何自定义FusionCharts图表上的工具提示?
    span 文本内容超过宽度自动换行
    JS正则表达式验证账号、手机号、电话和邮箱
  • 原文地址:https://www.cnblogs.com/xilifeng/p/2657198.html
Copyright © 2011-2022 走看看