有的没的Fragment
生命周期
一些要点:
1.3.0版本之后才引入fragment,所以minSdk要大于11;
2.Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fragment也是需要嵌套在Activity中的,受寄主Activity的生命周期影响,当然它也有自己的生命周期,另外不建议在Fragment里面嵌套Fragment,因为Fragment的生命周期不可控;
3.官方文档里面说创建Fragment至少需要实现三个方法:onCreate(),onCreateView(),onPause(),不过貌似只写一个onCreateView()也是可以的;(一个坑,一定要记住,是先执行了onCreate()方法后执行了onCreateView()方法)
4.Fragment的生命周期和Activity有点类似:
Resumed:在允许中的Fragment可见
Paused:所在Activity可见,但是得不到焦点
Stoped:调用addToBackStack(),Fragment被添加到Back栈
该Activity转向后台,或者该Fragment被替换/删除(停止状态的fragment仍然活着,所有状态和成员信息被系统保持着,然而它对用户不再可见,并且如果activity被干掉,它也会被干掉)
静态加载Fragment
首先自定义一个Fragment
然后在相应的Activity的xml文件中引用:
需要注意的地方:
fragment必须要写name和id
动态加载Fragment
首先要获得FragmentManager对象,再获得FragmentTransaction对象,再调用add()或者repalce()方法加载Fragment,add(要传入的容器,fragment对象),在前面的基础上,还要调用commit()方法提交事务。
需要注意的地方:
需要引入android.support.v4.app.FragmentManager包
Fragment管理与事务
Activity管理Fragment主要依靠FragmentManager可以调用findFragmentById()获取指定的fragment,也可以调用popBackStack()方法弹出后台Fragment;也可以调用addToBackStack(null)加入栈或者使用addOnBackStackChangeListener()监听后台栈的变化。
如果是增删替换Fragment的话,则需要借助FragmentTransation对象,并记得操作完成后再使用commit()方法提交事务。
Fragment与Activity的交互
组件获取
Fragment获得Activity中的组件:getActivity().findViewById(R.id.button)
Activity获得Fragment中的组件(根据id和tag都可以):
getFragmentManager.findFragmentById(R.id.frag)
数据传递
Activity传数据给Fragment:
在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle)从而将Bundle数据包传给Fragment,然后在Fragment中调用getArguments获得Bundle对象,然后进行解析。一个栗子
在Activity中:
在Fragment中:
Fragment传数据给Activity:
在Fragment中定义一个接口,并写一个方法回调该接口:
在Activity中使用接口回调方法读取数据: