Fragment四

来源:互联网 发布:网页美工设计实训 编辑:程序博客网 时间:2024/04/30 01:20

没有用户界面的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);

0 0
原创粉丝点击