关于Fragment
Android 3.0 开始引入的API,Fragment英文翻译是碎片的意思。也可以把它当作Activity的子控件,Fragment的使用都是在Activity里面的,受Activity的生命周期影响。当然,它本身具有自己的生命周期。Android 3.0引入Fragment的初衷是为了适应平板电脑,但在实际开发中,开发者逐渐挖掘了Fragment的更多用途,如配合TabLayout+ViewPager实现分页管理等等。因此把Fragment成为四大组件外的第五大组件一点都不为过。
Fragment的生命周期
Fragment拥有自己的生命周期,但被其所在的Activity所在的生命周期所控制。
- onAttach
Fragment和Activity建立关联的时候调用。 - onCreate
始化Fragment。可通过参数savedInstanceState获取之前保存的值。 - onCreateView
Fragment加载布局时调用。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。 - onActivityCreated
当Activity中的onCreate方法执行完后调用。 - onStart
执行该方法时,Fragment由不可见变为可见状态。 - onResume
执行该方法时,Fragment处于活动状态,用户可与之交互。 - onPause
执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。 - onStop
执行该方法时,Fragment完全不可见 - onDestroyView
Fragment中的布局被移除时调用。销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。 - onDestroy
销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。 - onDetach
Fragment和Activity解除关联的时候调用。在onDestroy方法之后调用。
创建Fragment步骤
创建Fragment主要实现以下方法
- onCreate:系统创建Fragment对象时回调,获取初始化数据
- onCreateView:当Fragment绘制界面组件时回调,返回Fragment所绑定的View
- onPause:当用户离开Fragment时回调,常用于保存现场数据。
//取值对应的KEY
pivate final String KEY = "data";
//保存传递的值
private String data;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//启动如果包含KEY参数
if(getArguments().containsKey(KEY)){
data = getArguments().getString(KEY);
}
}
//重写该方法,返回的View作为与Fragment绑定的View
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_demo,container,false);
return View;
}
Activty中使用Fragment
Fragment是需要在Activity中使用的,把Fragment添加到Activity中主要有两种方式
- 在布局文件中使用<Fragment …/>添加,并使用android:name=‘’属性指定Fragment实现类
<fargment
android:name=‘com.xxx.xxx.MyFragment’
android:id=''
...
/>
- 在所在的Activity中通过FragmentTransaction对象使用add()方法添加,仍需元素但不需要指定Fragment实现类,该方法更加灵活。
<FrameLayout
android:id='@+id/fragment_container'
...
/>
//创建Bundle ,向Fragment传递参数
Bundle arguments = new Bundle();
arguments.putString(”key“,"Hello World");
//创建Fragment 实例
MyFragment fragment = new MyFragment();
//传递参数
fragment.setArguments(arguments);
//使用fragment替换之前设定的容器
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container,fragment).commit();
资料
[1] 疯狂Android讲义