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

第63页





finish();  //关闭当前Activity



}



});

(7)重新打开MainActivity,在该类中,重写onActivityResult()方法,在该方法中,需要判断requestCode请求码和resultCode结果码是否与预先设置的相同,如果相同,则获取传递的数据包,并从该数据包中获取选择的头像id并显示。具体代码如下:

@Override



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



super.onActivityResult(requestCode,  resultCode,  data);



if(requestCode==0x11  &&  resultCode==0x11){  //判断是否为待处理的结果



Bundle  bundle=data.getExtras();  //获取传递的数据包



int  imageId=bundle.getInt("imageId");  //获取选择的头像id



//获取布局文件中添加的ImageView组件



ImageView  iv=(ImageView)findViewById(R.id.imageView1);



iv.setImageResource(imageId);  //显示选择的头像



}



}

(8)在AndroidManifest.xml文件中配置HeadActivity,配置的主要属性有Activity使用的标签、图标和实现类,具体代码如下:




android:label="选择头像"



android:icon="@drawable/ic_launcher"



android:name=".HeadActivity">





运行本实例,将显示一个填写用户注册信息的界面,输入用户名、密码、确认密码和E-mail地址后,单击“选择头像”按钮,将打开如图5.12所示的选择头像界面,单击想要的头像,将返回到填写用户注册信息界面,如图5.13所示。



图5.12 选择头像界面



图5.13 填写用户注册信息界面





5.4 使用Fragment

教学录像:光盘\TM\lx\5\使用Fragment.exe

Fragment是Android  3.0新增的概念,其中文意思是碎片,它与Activity十分相似,用来在一个Activity中描述一些行为或一部分用户界面。使用多个Fragment可以在一个单独的Activity中建立多个UI面板,也可以在多个Activity中重用Fragment。

一个Fragment必须被嵌入到一个Activity中,它的生命周期直接受其所属的宿主Activity的生命周期影响。例如,当Activity被暂停时,其中的所有Fragment也被暂停;当Activity被销毁时,所有隶属于它的Fragment也将被销毁。然而,当一个Activity处于resumed状态(正在运行)时,可以单独地对每一个Fragment进行操作,如添加或删除等。

5.4.1 创建Fragment

要创建一个Fragment,必须创建一个Fragment的子类,或者继承自另一个已经存在的Fragment的子类。例如,要创建一个名称为NewsFragment的Fragment,并重写onCreateView()方法,可以使用下面的代码:

public  class  NewsFragment  extends  Fragment  {



@Override



public  View  onCreateView(LayoutInflater  inflater,  ViewGroup  container,



Bundle  savedInstanceState)  {



//从布局文件news.xml  加载一个布局文件



View  v  =  inflater.inflate(R.layout.news,  container,  true);



return  v;



}



}

说明:  当系统首次调用Fragment时,如果想绘制一个UI界面,那么在Fragment中,必须重写onCreateView()方法返回一个View;否则,如果Fragment没有UI界面,可以返回null。

5.4.2 在Activity中添加Fragment

向Activity中添加Fragment,有两种方法;一种是直接在布局文件中添加,将Fragment作为Activity整个布局的一部分;另一种是当Activity运行时,将Fragment放入Activity布局中。下面分别进行介绍。

1.  直接在布局文件中添加Fragment

直接在布局文件中添加Fragment可以使用标记实现。例如,要在一个布局文件中添加两个Fragment,可以使用下面的代码:








android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:orientation="horizontal"  >






android:id="@+id/list"



android:layout_weight="1"



android:layout_width="0dp"



android:layout_height="match_parent"  />






android:id="@+id/detail"



android:layout_weight="2"



android:layout_marginLeft="20px"



android:layout_width="0dp"



android:layout_height="match_parent"  />





说明:  在标记中,android:name属性用于指定要添加的Fragment。

2.  当Activity运行时添加Fragment

当Activity运行时,也可以将Fragment添加到Activity的布局中,实现方法是获取一个FragmentTransaction的实例,然后使用add()方法添加一个Fragment,add()方法的第一个参数是Fragment要放入的ViewGroup(由Resource  ID指定),第二个参数是需要添加的Fragment,最后为了使改变生效,还必须调用commit()方法提交事务。例如,要在Activity运行时添加一个名称为DetailFragment的Fragment,可以使用下面的代码: