Android笔记——Fragment

Fragment笔记



Fragment基本使用

1.静态加载

通过在Activity的layout文件中声明Fragment

(1)、在Activity的layout文件中声明 <fragment />(注:标签内name属性指定了在layout中实例化的Fragment类,同时必须为Fragment标识唯一的id属性或tag属性)。
(2)、建立Fragment对应的布局文件。
(3)、实现自定义的Fragment类,必须继承Fragment或者Fragment的子类(DialogFragment,ListFragment,PreferenceFragment,WebViewFragment)。
必须实现的回调函数:
  • 当第一次绘制Fragment的UI时系统调用这个方法,必须返回一个View,如果Fragment不提供UI也可以返回null。

    • 注意:如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。
        onCreateView() 
        //返回View对象,可调用inflater.inflate(resource,root,attactToRoot)
        //resource:Fragment需要加载的布局文件
        //root:加载layout的父ViewGroup
        //attactToRoot:false,不返回父ViewGroup
  • 系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。
onCreate()
  • 当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。
    onPause()
(4)、当在Activity的Java文件中调用已添加好Fragment标签的布局文件时,系统自动实例化Fragment类并调用 onCreateView()方法,获取到相应的布局文件,同时在Activity中可以通过 findViewById()方法获取到Fragment加载的布局中相应的控件。
2.动态加载

通过撰写代码将Fragment添加到一个Activity layout中

(1)、开启一个Fragment事务
  • 在Activity的Java代码中调用getFragmentManager()方法获取一个FragmentManager对象,通过FragmentManager对象调用beginTransaction()方法获取到一个FragmentTransaction对象。

(2)、事务处理:每一个事务执行一个或一套变化,包括add()、remove()、replace(),最后调用commit()方法提交给Activity

  • 添加Fragment到布局中去
        add(containerViewId, fragment)
        /**
        * containerViewId:加载fragment的布局id
        * fragment:Fragment对象
        */

(3)、回退效果,在commit()方法前调用addToBackStack()方法


Fragment生命周期

1.Fragment的生命周期依赖Activity的生命周期,参见下图
这里写图片描述

2.Fragment的各个回调方法的解释

  • onAttach()当Fragment被添加到Activity时候会回调这个方法,并且只调用一次

  • onCreate()创建Fragment时会回调,只会调用一次

  • onCreateView()每次创建都会绘制Fragment的View组件时调用

  • onActivityCreated()当Fragment所在的Activty启动完成后调用

  • onStart()启动Fragment

  • onResume()恢复Fragment时会被回调,调用onStart()方法后面一定会调用onResume()方法

  • onPause()暂停Fragment

  • onStop()停止Fragment

  • onDestroyView()销毁Fragment所包含的View组件时回调

  • onDestroy()销毁Fragment时会被回调

  • onDetach()Fragment从Activity中删除时会回调该方法,并且这个方法只会调用一次

    这里写图片描述

3.案例:启动Fragment——>屏幕锁屏——>屏幕解锁——>切换到其他的Fragment——>回到桌面——>回到应用——>退出Fragment
(1)、 启动Fragment
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()
(2)、 屏幕锁屏
onPause()->onStop()
(3)、 屏幕解锁
onStart()->onResume()
(4)、 切换Fragment
onPause()->onStop()->onDestroyView()
(5)、 返回原先的Fragment
onCreateView->onActivityCreated()->onStart()->onResume()
(6)、 回到桌面
onPause()->onSaveInstanceState()->onStop()
(7)、 回到Activity
onStart()->onResume()
(8)、 退出Fragment
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()

Fragment与Activity间通信

1.Activity向Fragment传递数据

  • 两者之间通过Bundle数据包通信
  • (1)、在Activity的Java代码中new一个Bundle对象,并放入数据
  • (2)、动态加载Fragment,方法在上已述
  • (3)、定义接受信息的Fragment类,同时调用 getArguments().get(key)获取数据
  • 通过Fragment自定义方法来通信
  • (1)、静态加载Fragment,方法在上
  • (2)、在Activity的Java代码调用 getFragmentManager()获取FragmentManager对象,并调用对象中的 findFragmentById()findFragmentByTag()方法来获取Fragment对象
  • (3)、强制转换获取到的Fragment对象为自己自定义的Fragment,就可调用自定义的方法来进行通信。 如:在Fragment类中定义String成员变量,提供set和get方法,在Activity中就可调用set方法修改变量值
2.Fragment向Activity传递数据
通过在Fragment类中定义内部回调接口,在Activity中实现该接口实现通信
(1)、在Fragment类中定义内部接口,同时定义一个接口对象
(2)、在 onAttach()方法中实例化接口对象
    public void onAttach(Activity activity) {
    // TODO Auto-generated method stub  
    listener=(MyListener) activity;
    super.onAttach(activity);
}
(4)、在Activity中继承该接口,并实现定义的方法
(3)、可以在Fragment类中调用接口定义的方法来通信了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值