Android基础——Fragment基础入门(一)

来源:互联网 发布:武器实验室5级升级数据 编辑:程序博客网 时间:2024/04/28 18:41

!!!不要在线程当中对UI进行任何操作。Android为开发人员提供了一种能够在线程中更新UI的方式,就是Hundler+Message+Thread。

!!!在使用V4包中的Fragment的时候,必须要使用FragmentActivty来加载,如果直接使用Activity的话,将会出现类型转换异常。

!!!使用< fragment >标签的时候,必须要给fragment设置id或者是Tag,否则抛异常。

2015/8/26 9:29:12

Fragment

  • Fragment是一个能独立显示界面及有自己独立的代码逻辑的组件,Fragment可以在界面中直接引用。
  • Fragment在你的应用中应当是一个模块化的可重用的组件,因为Fragment定义了自己的布局,已经通过自己的生命周期回调方法定义了它自己的行为,我们可以将一个Fragment放到多个Activity中。

Fragment的优点

  • Fragment可以使我们轻松的将Activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。
  • Fragment可以轻松创建动态灵活的UI设计,可以适应不同的的屏幕尺寸,从手机到平板。
  • Fragment是一个独立的模块,紧紧的与Activity绑定在一起,可以在运行中动态的插入、移除、替换等。
  • Fragment提供一个新的方式,让你在不同的设备上统一你的UI。
  • Fragment解决在Activity之间的切换不流畅,轻量级的切换。
  • Fragment替代TabActvity做导航,性能更好。
  • Fragment在4.2中新增嵌套Fragment使用方法,能够生成更好的界面效果。
  • Fragment做局部内容更新更方便,原来为了达到这一点需要将多个布局放到一个Activity中,现在可以将其放入Fragment中,需要的时候加载Fragment,提高性能。

Fragment的生命周期

  • 下面两图一张是Fragment的生命周期图,一张是Fragment与Activity的生命周期对比图。

  • onAttach:onAttach()方法,是在Fragment与Activity关联之后调用,初始化fragment参数可以从getArguments()获得。,但是,当Fragment附加给Activity之后,就无法再调用setArguments(),除了在最开始时,其它时间都无法向初始化参数添加内容。

  • onCreate:onCreate()方法,Fragement初次创建时调用。它看起来很像Activity的的onCreate()函数,但是这个只是用来创建Fragment的,此时的Activity还没有创建完成,因为Fragment也是Activity创建的一部分,所以,在这个方法内,我们若想使用Activity内的一些资源,是获取不到的。比如:获取同一个Activity中其它Fragment的控件。如果想要获取Activity中相关联的资源,必须在onActivityCreated()中获取。

    /***如果把这段代码放到Fragment的onCreate()中,那么btnTry的值将会是NULL。*注意:getActivity()是有值的,因为一旦Activity与Fragment Attached就可以通过getActivity()来获取相关联的Activity的实例。*/Button btnTry = getActivity().findViewById(R.id.btn_try);
  • onCreateView:在这个Fragment构造它的用户接口视图(即布局)时调用,在这里期望返回此Fragment的一个视图层次结构。使用LayoutInflater的inflate()方法来构造视图,代码如下:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,                 Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment3, container, false);}

inflate()的函数声明如下:

    public View inflate(int resource, ViewGroup root, boolean attachToRoot)

其中第一个参数代表我们的布局文件,第二个参数ViewGroup,一般写container,可以为NULL,但是如果父窗口值为NULL,意味着该Fragment不可见,因为它没有附加到任何的视图当中。

第三个参数boolean attachToRoot,一般为false,它的含义是是否将当前xml的根节点作为整个APP视图的根节点,如果为true,那么返回的View将是整个App视图架构的根节点,我们一般选择false,因为我们使用Fragment是依附于Activity的。Activity上可能还有其它控件,如果选择为true,那么整个Fragment以外的所有分支都将被删除,整个APP视图将只剩下Fragment。

  • onActivityCreated:在Activity的onCreate()方法执行完之后,会调用此方法,到这里的时候,Activity已经创建完成,在这个方法中,我们可以使用Activity的所有资源,把下面的代码放到这个方法中,将不会是null值。

    Button btnTry = getActivity().findViewById(R.id.btn_try);
  • onStart:到了onStart()的时候,Fragment对用户就是可见的,但用户还没有开始跟Fragment交互,在生命周期中可以看到,Fragment的onStart()和Activity的onStart()的过程是绑定的,意义即是一样的,以前我们写在Acitivy中这个方法来处理的代码,放入Fragment的这个方法中依然可以处理。

  • onResume:当这个Fragment对用户可见并且正在运行时调用,这是Fragment与用户交互之前的最后一个调用,从生命周期对比中,可以看出,Activity的和Fragment的这个方法是绑定的,意义相同,它依赖于Activity的Activity.onResume()方法,当OnResume()结束后,就可以正式与用户交互了。

  • onPause:此回调与Activity的OnPause()相绑定,与Activity的OnPause()意义一样。

  • onStop:这个回调与Activity的OnStop()相绑定,意义一样。已停止的Fragment可以直接返回到OnStart()回调,然后调用OnResume()。

  • onDestroyView:如果Fragment即将被结束或保存,那么撤销方向上的下一个回调将是onDestoryView()。会将在onCreateView创建的视图与这个fragment分离。下次这个fragment若要显示,那么将会创建新视图。这会在onStop之后和onDestroy之前调用。这个方法的调用同onCreateView是否返回非null视图无关。它会潜在的在这个视图状态被保存之后以及它被它的父视图回收之前调用。

  • onDestroy:当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach。

  • onDetach:Fragment生命周期中最后一个回调是onDetach()。调用它以后,Fragment就不再与Activity相绑定,它也不再拥有视图层次结构,它的所有资源都将被释放。

Fragment的特点

  1. Fragment能够将通用的功能(线程、联网)、界面统一的封装到一起,形成一个特定类,可以理解为Fragment就是一个小的Activity。
  2. Activity内部可以包含多个Fragment,相当于将一个Activity打散,可以由多个Fragment组合起来,可以形成复杂的功能。
  3. Fragment自己管理自己的界面显示,因此Activity在使用Fragment的时候,完全不需要管内部如何显示,只要能够引用就行了。
0 0
原创粉丝点击