4.5 消费券采购列表多选项CheckBox的应用
范例说明
你使用过消费券吗?总额度只有3600元的消费券,虽然活动已经宣告结束,但也可以当成一个限制使用额度的范例示范。这个范例程序要示范的是CheckBox.setOnCheckedChangeListener,在程序中设计3个CheckBox核取项,分别表示三种物品列表,当User勾选其中一个物品,就在TextView里显示已选择的物品列表。
程序的关键在同时监听3个CheckBox.OnCheckedChangeListener的状态,并在CheckBox. onChecked()方法中,重组所有被勾选的物品文字。
运行结果(见图4-5)
图4-5 勾选不同的CheckBox,该CheckBox的文字会在TextView中显示出来 |
范例程序
- src/irdc.ex04_05/EX04_05.java
主程序的重点在于构造3个CheckBox的对象,以及一个TextView对象,并通过setOnChecked ChangeListener实现onCheckedChanged()方法来更新TextView文字。
- /* import程序略 */
- public class EX04_05 extends Activity
- {
- /*声明对象变量*/
- private TextView mTextView1;
- private CheckBox mCheckBox1;
- private CheckBox mCheckBox2;
- private CheckBox mCheckBox3;
- /** Called when the activity is first created. */
- @Override
- public void 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
- public void 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);
- }
- else if(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==true
- & mCheckBox3.isChecked()==true)
- {
- mTextView1.setText(str0+str2+plus+str3+result);
- }
- else if(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);
- }
- else if(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==false
- & mCheckBox3.isChecked()==true)
- {
- mTextView1.setText(str0+str3+plus+result2);
- }
- else if(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==true
- & mCheckBox3.isChecked()==false)
- {
- mTextView1.setText(str0+str2);
- }
- else if(mCheckBox1.isChecked()==true & mCheckBox2.isChecked()==false
- & mCheckBox3.isChecked()==false)
- {
- mTextView1.setText(str0+str1);
- }
- else if(mCheckBox1.isChecked()==false & mCheckBox2.isChecked()==false
- & mCheckBox3.isChecked()==false)
- {
- mTextView1.setText(str0);
- }
- }
- };
- }
扩展学习
读者可以将OnCheckedChangeListener更改为OnTouchListener(屏幕触控事件),方法如下:
- private CheckBox.OnTouchListener mCheckBoxTouch =
- new CheckBox.OnTouchListener()
- {
- @Override
- public boolean onTouch(View v, MotionEvent event)
- {
- // TODO Auto-generated method stub
- /* 判断在触控笔指压此控件时的状态 */
- if(mCheckBox1.isChecked()==false)
- {
- /*当触控笔放开后的动作*/
- }
- else if(mCheckBox1.isChecked()==true)
- {
- /*当触控笔压下后的动作*/
- }
- return false;
- }
- };
请试着比较OnCheckedChangeListener与OnTouchListener在使用上的差异。