Fragment的父类有两个,分别为android.app.Fragment和android.support.v4.app.Fragment。建议使用android.support.v4.app.Fragment。由于此Fragment在全部的android版本中能够保持一致。java
在builid.gradle中添加了appcompat-v7库,v4也一块儿被添加了。因此不用重复添加android
注意:在使用<fragment>标签在布局中添加fragment的时候,必定要设置id属性,不然会出现问题app
注意:fragment所要占据的位置,不能够使用<fragment>标签。不然没法达到想要的效果ide
a、建立待添加的fragment实例布局
b、获取FragmentManager,能够调用Activity对象的getSupportFragmentManager()gradle
c、开启一个事务,经过调用fragmentManager对象的beginTransaction()开启ui
d、向容器中添加或者替换fragment,调用replace()this
e、提交事务。调用commit()spa
具体的代码:code
/** * * @param flag 是否将fragment添加到BackStack中 * 以实现相似于Activity返回键,能够返回上一个Activity的效果 * @param fragment 新fragment */ public void replaceFragment(boolean flag,Fragment fragment){ FragmentManager fragmentManager = this.getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_simple,fragment); if(flag) { fragmentTransaction.addToBackStack(null); } fragmentTransaction.commit(); }
对于效果的说明:
相似于Activity,点击返回键,能够返回到上一个Activity
具体的实现方法:
在动态添加fragment后,调用fragmentTransaction.addToBackStack(null)便可
a、在Activity中,使用FragmentManager对象的fragmentManager.findFragmentById()方法便可
b、在Fragment中,调用getActivity()得到Activity对象
c、Fragment之间,能够调用getActivity()得到Activity对象,而后在经过Activity对象使用FragmentManager对象的fragmentManager.findFragmentById()
a、运行状态:Fragment与Activity都处于运行状态
b、暂停状态:Activity处于暂停状态,或者是另外一个未占满屏幕的Activity位于栈顶,Fragment也处于暂停状态
c、中止状态:Activity处于中止状态,Fragment也处于中止状态。或者是Fragment被显示调用replace或remove方法,从Activity中移除,并调用了addToBackStack(null)。处于中止状态的Fragment对用户不可见,可能会被销毁。
d、销毁状态:Activity被销毁,与之关联的Fragment也会被销毁。或者Fragment被显示调用replace或者remove方法,并无调用addToBackStack(null)
参考地址:https://developer.android.com/guide/components/fragments?hl=zh-cn
保存数据:调用onSaveInstanceState()方法
恢复数据:调用onCreate()、onCreateView()和onActivityCreated()方法