Fragment的生命周期
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
Fragment常用的三个类:
android.app.Fragment 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保证一些列Fragment操作的原子性
Fragment常用的API
获取FragmentManage的方式:
getFragmentManager()
FragmentTransaction的方法:
transaction.add()
往Activity中添加一个Fragment
transaction.remove()
从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈 ,这个Fragment实例将会被销毁
transaction.replace()
使用另一个Fragment替换当前的,实际上就是remove()然后add()
transaction.hide()
隐藏当前的Fragment,仅仅是设为不可见
transaction.show()
显示之前隐藏的Fragment
detach()
会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
attach()
重建view视图,附加到UI上并显示。
transatcion.commit() //提交一个事务
FragmentTransaction.addToBackStack(String)
添加一个Fragment事务到回退栈
注意:
Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。
Fragment与Activity通信:
1:Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
2: 每个Fragment都有一个唯一的TAG或者ID,可以通过
3: Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作
Fragmeny与ActionBar和MenuItem集成:
1: 在Fragment的onCreate中调用 setHasOptionsMenu(true);
2: 在Fragment子类中实现onCreateOptionsMenu
3: 在Fragment中处理MenuItem的点击,也可以实现onOptionsItemSelected;(Activity也可以直接处理该MenuItem的点击事件)
没有布局的Fragment的作用:
没有布局文件Fragment实际上是为了保存,当Activity重启时,保存大量数据准备的
动态,静态使用fragment: