刚接触到fragment,先记点小笔记。
小提示
使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment,ListFragment,PreferenceFragment,WebViewFragment),所以Fragment的代码看起来和Activity的类似。
确保getFragmentManager()这个和PlaceholderFragment都属于同一个包下的。android现在fragment有两个 一种是sdk中的一种是v4支持包中的 ,弄混了就报错。
Fragment生命周期
onAttach():在fragment与Activity关联之后调用。
onCreate():是指创建该fragment类似于Activity.onCreate,你可以在其中初始化除了view之外的东西。但这个只是用来创建Fragment的,此时的Activity还没有创建完成
onCreateView():是创建该fragment对应的视图,你必须在这里创建自己的视图并返回给调用者,例如
return inflater.inflate(R.layout.fragment_settings, container,
false);。 super.onCreateView有没有调用都无所谓,因为super.onCreateView是直接返回null的。onActivityCreated():在Activity的OnCreate()结束后,会调用此方法。所以到这里Activity已经创建完成。在这个函数中才可以使用Activity的所有资源。
onStart():此时Fragment对用户是可见的了。但用户还未开始与Fragment交互。Fragment的OnStart()过程与Activity的OnStart()过程是绑定的。意义即是一样的。以前你写在Activity的OnStart()中来处理的代码,用Fragment来实现时,依然可以放在OnStart()中来处理。
onResume():当fragment对用户可见并且正在运行时调用。这是Fragment与用户交互之前的最后一个回调。Fragment的OnResume与Activity的OnResume是相互绑定的,意义是一样的。它依赖于包含它的activity的Activity.onResume。当OnResume()结束后,就可以正式与用户交互了。
onPause():此回调与Activity的OnPause()相绑定,与Activity的OnPause()意义一样。
onStop():这个回调与Activity的OnStop()相绑定,意义一样。已停止的Fragment可以直接返回到OnStart()回调,然后调用OnResume()。
onDestroyView():Fragment中的布局被移除时调用。下次这个fragment若要显示,那么将会创建新视图。这会在onStop之后和onDestroy之前调用。这个方法的调用同onCreateView是否返回非null视图无关。它会潜在的在这个视图状态被保存之后以及它被它的父视图回收之前调用。
onDestroy():当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach。onDetach():Fragment生命周期中最后一个回调是
onDetach():Fragment和Activity解除关联的时候调用,它不再拥有视图层次结构,所有资源都将被释放。
动态添加Fragment:
1.获取到FragmentManager,在V4包中通过getSupportFragmentManager,在系统中原生的Fragment是通过getFragmentManager获得的。
2.通过调用beginTransaction方法开启一个事务。
3.向容器内加入Fragment,一般使用add或者replace方法实现,需要传入容器的id和Fragment的实例。
4.提交事务,调用commit方法提交。
Listfragment listfragment = new Listfragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, listfragment);
fragmentTransaction.commit();