你使用过消费券吗?总额度只有3600元的消费券,虽然活动已经宣告结束,但也可以当成一个限制使用额度的范例示范。这个范例程序要示范的是CheckBox.setOnCheckedChangeListener,在程序中设计3个CheckBox核取项,分别表示三种物品列表,当User勾选其中一个物品,就在TextView里显示已选择的物品列表。
程序的关键在同时监听3个CheckBox.OnCheckedChangeListener的状态,并在CheckBox. onChecked()方法中,重组所有被勾选的物品文字。
主程序的重点在于构造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在使用上的差异。