Fragment 即片段。他的使用必须是建立在Activity之前的,需要嵌入到Activity中。
首先,他的一些特点:
1,Fragment总是作为Activity的界面的组成部分,他可以静态或者是动态的加入到Activity中,当Activity中有一个组件是fragment就是静态,假如Activity的界面布局中使用FrameLayout或者其他布局,然后被fragment的事物调用显示出fragment,就是动态使用。Fragment可调用getActivity()方法获得上下文,取得他所在的Activity,Activity调用getFragmentManager可以对fragment进行管理,其中这里的fragment是android.app.Fragment,而不是android.support.v4.app.Fragment,假如是后者的fragment实例,则是需要使用getSupportFragmentManager()来获得,通过manager的findFragmentById或者findFragmentByTag可以获得具体的某一个Fragment
2,在Activity的运行过程当中,可以调用Fragment的事物的add,remove,replace等方法动态的增加或者删除Activity中的Fragment,通过hide或者show隐藏或者显示Fragment
3,一个Activity可以同时组合多个Fragment,反过来,一个Fragment也可以被多个Activity复用
4,Fragment可以响应自己的输入事件,并拥有自己的生命周期,但是他的生命周期直接被其所属的Activity的生命周期所控制。
然后,我们使用Fragment的时候,一般是与ViewPager一起使用,类似微信,或者直接只有一个framelayout,通过replace来替换在同一个位置使用Fragment。案例实现:
假如我们是通过ViewPager+Fragment来实现的话,有时候会出现一些问题。
问题一:FragmentManager的问题
假如,我们使用的v4包下的fragment就是用getSupportFragmentManager()来获得,当我们使用app报下的Fragment,就是用getFragmentManager()来获得。
问题二:当我们再Fragment中,在使用一个Viewpager+Fragment实现的时候,我们需要使用的Fragmentmanager就不是上面的那样获得,而是需要通过getChildFragmentManager()来获得。否则,我们当前fragment下的Fragment跟前面的级别一样了。打个比喻:现在有一个Activity A,然后它包含三个Fragment,没有使用Viewpager实现,分别是B,C,D,然后,在 C 的下面,需要包含三个Fragment E,F,G,需要使用Viewpager来实现,这时候,我们就需要通过getChildFragmentManager()来实现了。
问题三:Fragment启动Activity的问题:详细请看我的blog:详细使用Fragment启动Activity返回的问题以及解决办法
问题四:fragment的进出栈问题,首先,我们的需求是什么,比如现在有Fragment A,B,C,D现在我们使用A启动B,需求是A启动B之后回来,A的数据需要不变,我们的使用方法就是,需要使用Fragment的事务方法,把A hide起来,然后需要,然后调用事务的addToBackStack方法,这样就可以保存了。假如我们是使用了事务的replace方法,没有把当前的Fragment回栈的话,那么该Fragment的实例会被销毁,当再次需要回来的时候回重新创建。推荐blog:Android
Fragment 真正的完全解析(下)
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/liweijie_chengxuyuan/article/details/45487605