浅谈Android中的 Fragment 以及使用


Fragment 是个什么东西?

                        可以把Fragment理解成Activity中的模块,这个模块有自己的布局,有自己的生命周期,单独处理自己的输入,在Activity运行的时候可以加载或者移除Fragment模块。还可以覆盖前面的一个页面,加载想要的模块

 Fragment介绍:

                      Android是在Android 3.0 (API level 11)开始引入Fragment的,要么用全部用app,要么全部用v4(3.0以下需要导入的包),不然可是会报错的!

那么如果开发的app需要在3.0以下的版本运行呢?比如还有一点点市场份额的2.3!

于是乎,v4包就这样应运而生了,而最低可以兼容到1.6版本!至于使用哪个包看你的需求了,不过现在几乎都是

4.0以上的,所以这个时候,你可以直接使用app包下的Fragment,然后调用相关的方法通常都是不会有什么问题的


        使用v4包要注意的事项:

①如果你使用了v4包下的Fragment,那么所在的那个Activity就要继承FragmentActivity哦!

案例:今天在xml文件中静态地载入fragment,然后重写了Fragment,但是在加载Activity的时候就报错了,

大概的提示就是Fragment错误还是找不到什么的,name属性改了几次还是错!最后才发现是用了

v4的包的缘故,只需让自己的Activity改成FragmentActivity即可!

Fragment 生命周期?                                                          Activity生命周期:

     浅谈Android中的 Fragment、生命周期回调方法 以及使用_第1张图片          浅谈Android中的 Fragment、生命周期回调方法 以及使用_第2张图片
 两个生命周期对比:       浅谈Android中的 Fragment、生命周期回调方法 以及使用_第3张图片
          只有真正的掌握 生命周期 才能更好的运用frgment .        1.onAttach()
          作用:fragment已经关联到activity,这个时候 activity已经传进来了, 获得activity的传递的值 就可以进行 与activity的通信里, 当然也可以使用getActivity(),前提是这个fragment已经和宿主的activity关联,并且没有脱离,有且只有调用一次。
         2.onCreate()         系统创建fragment的时候回调他,在他里面实例化一些变量
        这些个变量主要是:当你 暂停 停止的时候 你想保持的数据
        他只调用一次。

        3.onCreateView()

          第一次使用的时候 fragment会在这上面画一个layout出来, 为了可以画控件 要返回一个 布局的view,也可以返回null j 就什么都没有显示。 

           当系统用到fragment的时候 fragment就要返回他的view,越快越好 ,所以尽量在这里不要做耗时操作,比如从数据库加载大量数据


        4onActivityCreated()

             当Activity中的onCreate方法执行完后调用。

       注意了:
从这句官方的话可以看出:当执行onActivityCreated()的时候 activity的onCreate才刚完成。
所以在onActivityCreated()调用之前 activity的onCreate可能还没有完成,
所以不能再onCreateView()中进行 与activity有交互的UI操作,UI交互操作可以在onActivityCreated()里面进行。
所以呢,这个方法主要是初始化那些你需要你的父Activity或者Fragment的UI已经被完
整初始化才能初始化的元素

       5.onStart()

       和activity一致,启动Fragement 启动时回调,,此时Fragement可见。
       6.onResume()

        和activity一致 在activity中运行是可见的。激活, Fragement 进入前台, 可获取焦点时激活。

       7.onPause()

        和activity一致 其他的activity获得焦点,这个仍然可见第一次调用的时候,指的是 用户 离开这个fragment(并不是被销毁)
通常用于 用户的提交(可能用户离开后不会回来了)
        8.onStop()

       和activity一致, fragment不可见的, 可能情况:activity被stopped了或者 fragment被移除但被,加入到回退栈中,一个stopped的fragment仍然是活着的如果长时间不用也会被移除。

       9.   onDestroyView() 

      Fragment中的布局被移除时调用。表示fragemnt销毁相关联的UI布局, 清除所有跟视图相关的资源。

然后这个知识移除视图  并没有销毁而且还没有脱离activity

       10.onDestroy()

       销毁fragment对象, 跟activity类似了。
      11.onDetach()

       Fragment和Activity解除关联的时候调用。 脱离activity。


     

          接下来 来模拟一个fragment 的启动 按下home键 销毁等 系统是怎么样调用生命周期,这里用Logcat日志来查看

         (XX_Fragment 为Fragment的生命周期  否则为Activity周期)

      浅谈Android中的 Fragment、生命周期回调方法 以及使用_第4张图片

      浅谈Android中的 Fragment、生命周期回调方法 以及使用_第5张图片

        浅谈Android中的 Fragment、生命周期回调方法 以及使用_第6张图片

      浅谈Android中的 Fragment、生命周期回调方法 以及使用_第7张图片

      当现实fragment的时候都先执行activity方法,当销毁的时候都是现执行 fragment的方法,这样更好理解fragment是嵌套在activity中

          总结生命周期的回调方法:

 
         1.当一个fragment被创建的时候,它会经历以下状态.。
                  onAttach()
                  onCreate()
                  onCreateView()
                  onActivityCreated()
         2.当这个fragment对用户可见的时候,它会经历以下状态。
                  onStart()
                  onResume()
         3.当这个fragment进入“后台模式”的时候,它会经历以下状态。
                  onPause()
                  onStop()
         4.当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
                  onPause()
                  onStop()
                  onDestroyView()
                  onDetach()
          5.就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
                  onCreate()
                  onCreateView()
                  onActivityCreated()
         6.fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
                  onAttached() —— 当fragment和activity关联之后,调用这个方法。
                  onCreateView() —— 创建fragment中的视图的时候,调用这个方法。
                  onActivityCreated() —— 当activity的onCreate()方法被返回之后,调用这个方法。
                  onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
                  onDetach() —— 当fragment和activity分离的时候,调用这个方法。


   解析完了生命周期 以及生命周期的回调方法,接下来看下如何应用。

 

   浅谈Android中的 Fragment、生命周期回调方法 以及使用_第8张图片

      假设这次有个 侧滑菜单 就是类似QQ 的侧滑菜单   侧滑菜单上的每个item 点击之后都有自己的fragment 但是在使用过程中,如果使用不当,很容易造成 不断的重新加载view 损耗内存空间。

        这几天在网上查找了一些frgment 的优化资料,也发现了很多都是问题,自己撸一套自己使用。

     

  介绍具体的几个常用的方法:

      

FragmentManager fragmentManager = getFragmentManager()FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

 

       管理Fragment的一些添加 隐藏 替换等操作 需要的。

   (注:如果import android.support.v4.app.FragmentManager;那么使用的是:FragmentManager fragmentManager = getSupportFragmentManager())

       add()方法加上Fragment的对象

  

fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTransaction.commit();
       一次类推。   replace()   show()  hide()  等方法都是类似使用。


         这里最后看一贴代码,最后的使用

       

public void switchConent(Fragment from, Fragment to, String title)    { FragmentTransaction transactio = getSupportFragmentManager().beginTransaction();// 如果没有加入过if (!to.isAdded()){    if (from != null)    {// 如果不为空 则隐藏transactio.hide(from);transactio.addToBackStack(null);    }    // 添加    transactio.add(R.id.content_frame, to);    transactio.commit();} else{    if (from != null)    {transactio.hide(from);    }    /**这里可以写一些用户操作数据的 调用方法*/    // 隐藏当前的fragment,显示下一    transactio.show(to).commit();        }}

                    from 从哪个fragment 换到 目标fragment to;

                   isadded() 判断事都 添加过 如果没有 那可以添加。

                   逻辑也很简单,隐藏 显示 提交 交互使用。

 

                    比较关键的一点 就是如何更新fragment上的UI数据。 这里可以在对应的fragment 里写一些UI操作的方法 然后在 上面那段代码 show(Object).commit()   中调用。

  

                      管理 侧滑菜单上的所有  Fragment:

                      可以用 单例模式和工厂模式 来管理 全部的fragment 防止多次被创建。引用当前显示的fragment作为等下 换页的时候

      传入参数的from。


                    简单的fragment介绍完了。

        



                     

更多相关文章

  1. Android 公共库的建立方法
  2. android的intent使用方法 .
  3. Android文件系统的提取方法(一)
  4. Android获取webView快照与屏幕截屏的方法
  5. Android测量View宽和高的一般通用方法
  6. Android Activity生命周期和状态
  7. 实用Android studio gradle的离线安装方法(官方)

随机推荐

  1. SharePreferences
  2. Android中DRM mobile 1.0的初步介绍
  3. 史上最全的Android面试题集锦(完结)
  4. Android注入事件的三种方法比较
  5. android 数据库SQL 框架例子
  6. react native 相关资料
  7. 在Ecplise关联android4.2和android suppo
  8. Android(安卓)5.1 启动有线网卡并为其分
  9. android 拨号器
  10. Applying Styles and Themes - 应用Style