没有用户界面的Fragment
在大部分的情况下,Fragment用来封装UI的模块化组件,然而也可以创建没有UI的Fragment来提供后台行为,该行为会一直持续到Activity重新启动,这个特别适合于定期和UI交互的后台任务或者因配置改变而导致的Activity重新启东市,保存状态变得特别重要的场合
当Fragment的父Activity重新创建时,可以选择使用Fragment的setRetainInstance方法让一个活动的Fragment保留它的实例,在调用该方法之后,Fragment的生命周期会改变
当Activity重新启动时,同一个Fragment的实例会被保留下来,而不是和它的父Activity一起被销毁和重新创建。但Fragment所在的Activity被销毁时,将会受到onDetach事件,之后当新的父Activity实例化后,还会受到onAttach onCreateView 和onActivityCreated事件
*************
虽然可以对存在UI的Fragment使用这项技术,但一般不建议这样做,更好的u型那则是吧关联的后台任务和必要的状态移入新的没有UI的Fragment中,根据需要让两个Fragment进行交互
public class NewItemFragment extends Fragment{
public void onAttach(Activity activity){
//获得父类引用
}
public void onCreate(Bundle savedInstanceState){
//创建工作线程和任务
}
public void onActivityCreate(Bundle savedIntanceState){
//初始化工作线程和任务
}
}
要把Fragment 加入到Activity中,必须创建一个新的Fragment Transaction,并制定一个tag来表示Fragment 因为该Fragment 没有UI,所有它不应该和一个容器View关联而且同工厂不用改被添加到back栈中
FragmentTransaction fragmentTransaction =fragmentManger.beginTransaction();
fragmentTransaction.add(workerFragment,My_FRAGMENT_TAG);
fragmentTransaction.commit();
之后通过FragmentManager的findFragmentByTag获取一个引用
MyFragment myFragment =fragmentManager.fomdFragmentTag(My_FRAGMENT_TAG);