万书网 > 文学作品 > Android从入门到精通 > 第60页

第60页



说明:  在5.3.1节中的例5.3中,已经介绍了填写用户注册信息界面及显示注册信息界面的实现方法,本实例将在例5.3的基础上进行修改,为其添加“返回上一步”功能。

例5.4   在Eclipse中,复制项目5.3,并修改项目名为5.4,实现用户注册中的“返回上一步”功能。(实例位置:光盘\TM\sl\5\5.4)

(1)打开MainActivity,定义一个名称为CODE的常量,用于设置requestCode请求码。该请求码由开发者根据业务自行设定,这里设置为0x717,关键代码如下:

final  int  CODE=  0x717;  //定义一个请求码常量

(2)将原来使用startActivity()方法启动新Activity的代码修改为使用startActivityForResult()方法实现,这样就可以在启动一个新的Activity时,获取指定Activity返回的结果。修改后的代码如下:

startActivityForResult(intent,  CODE);  //启动新的Activity

(3)打开res\layout目录中的register.xml布局文件,在该布局文件中添加一个“返回上一步”按钮,并设置该按钮的android:id属性值为@+id/back,关键代码如下:




android:id="@+id/back"



android:layout_width="wrap_content"



android:layout_height="wrap_content"



android:text="返回上一步"  />

(4)打开RegisterActivity,在onCreate()方法中,获取“返回上一步”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,首先设置返回的结果码,并返回调用该Activity的Activity,然后关闭当前Activity,关键代码如下:

Button  button=(Button)findViewById(R.id.back);  //获取“返回上一步”按钮



button.setOnClickListener(new  OnClickListener()  {





@Override



public  void  onClick(View  v)  {



setResult(0x717,intent);  //设置返回的结果码,并返回调用该Activity的Activity



finish();  //关闭当前Activity



}



});

说明:  为了让程序知道返回的数据来自于哪个新的Activity,需要使用resultCode结果码。

(5)再次打开MainActivity,重写onActivityResult()方法,在该方法中,需要判断requestCode请求码和resultCode结果码是否与预先设置的相同,如果相同,则清空“密码”编辑框和“确认密码”编辑框,关键代码如下:

@Override



protected  void  onActivityResult(int  requestCode,  int  resultCode,  Intent  data)  {



super.onActivityResult(requestCode,  resultCode,  data);



if(requestCode==CODE  &&  resultCode==CODE){



((EditText)findViewById(R.id.pwd)).setText("");  //清空“密码”编辑框



((EditText)findViewById(R.id.repwd)).setText("");  //清空“确认密码”编辑框



}



}

运行本实例,将显示一个填写用户注册信息的界面,输入用户名、密码、确认密码和E-mail地址后,如图5.7所示,单击“提交”按钮,将显示如图5.9所示的界面,显示填写的用户注册信息及一个“返回上一步”按钮,单击“返回上一步”按钮,即可返回到如图5.7所示的界面,只是没有显示密码和确认密码。



图5.9 显示用户注册信息及“返回上一步”按钮界面

5.3.3 范例1:实现根据身高计算标准体重

例5.5   在Eclipse中创建Android项目,名称为5.5,实现根据输入的性别和身高计算标准体重。(实例位置:光盘\TM\sl\5\5.5)

(1)修改新建项目的res\layout目录下的布局文件main.xml,在默认添加的垂直线性布局管理器中,添加用于选择性别信息的单选按钮组和用于输入身高的编辑框,以及一个“确定”按钮。由于此处的布局代码比较简单,这里不再给出,具体代码可以参见光盘。

(2)编写一个实现java.io.Serializable接口的Java类,在该类中创建两个变量,一个用于保存性别,另一个用于保存身高,并为这两个属性添加对应的setter()和getter()方法,关键代码如下:

public  class  Info  implements  Serializable  {



private  static  final  long  serialVersionUID  =  1L;



private  String  sex="";  //性别



private  int  stature=0;  //身高



public  String  getSex()  {



return  sex;



}



public  void  setSex(String  sex)  {



this.sex  =  sex;



}



…  //此处省略了stature变量对应的setter()方法和getter()方法



}

说明:  在使用Bundle类传递数据包时,可以放入一个可序列化的对象。这样,当要传递的数据字段比较多时,采用该方法比较方便。在本实例中,为了在Bundle中放入一个可序列化的对象,我们创建了一个可序列化的Java类,方便存储可序列化对象。

(3)打开默认创建的主活动MainActivity,在onCreate()方法中,获取“确定”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,实例化一个保存性别和身高的可序列化对象info,并判断输入的身高是否为空,如果为空,则给出消息提示并返回;否则,首先获取性别和身高并保存到info中,然后实例化一个Bundle对象,并将输入的身高和性别保存到Bundle对象中,接下来创建一个启动显示结果Activity的intent对象,并将bundle对象保存到该intent对象中,最后启动intent对应的Activity。关键代码如下:

Button  button=(Button)findViewById(R.id.button1);



button.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {