Fragment基础详解

Fragment(碎片)是一种可以嵌入Activity中的UI片段,与Activity非常相似,不仅包含布局,同时也具有自己的生命周期。Fragment是专门针对大屏幕移动设备而推出的,它能让程序更加合理地利用屏幕空间,因此在平板电脑上应用广泛。

一、Fragment的生命周期

Fragment不能独立存在,必须嵌入到Activity中使用,因此Fragment的生命周期直接受所在的Activity影响。当Activity暂停时,它拥有的所有Fragment都暂停;当Activity销毁时,它拥有的所有Fragment都销毁。然而,当Activity运行时(在onResume()之后,onPause()之前),却可以单独地操作每个Fragment,如添加或删除Fragment等。

 

(1)onAttach()方法:FragmentActivity建立关联的时候调用。  

(2)onCreateView()方法:Fragment创建视图(加载布局)时调用。   

(3)onActivityCreated()方法:ActivityonCreate()方法返回时调用。   

(4)onDestroyView()方法:当该Fragmnet  的视图被移除时调用。

(5)onDetach()方法:FragmentActivity解除关联时调用。

Fragment的派生类

1DialogFragment

显示一个浮动的对话框。使用这个类创建对话框是替代activity创建对话框的最佳选择。因为可以把fragmentdialog放入到activity的返回栈中,使用户能再返回到这个对话框。

2ListFragment

 显示一个列表控件,就像ListActivity类,它提供了很多管理列表的方法,比如onListItemClick()方法响应click事件。 注意:如果fragment是从ListFragment中派生的,就不需要实现onCreateView()方法了,因为默认的实现已经返回了ListView控件对象。

(3)PreferenceFragment

显示一个由Preference对象组成的列表,与PreferenceActivity相同。它用于为程序创建设置”activity

三、Fragment的管理

要管理fragment,需使用FragmentManager,要获取它,需在activity中调用方法getFragmentManager()。可以用FragmentManager来做以下事情:

1使用方法findFragmentById()findFragmentByTag(),获取activity中已存在的fragment

2使用方法popBackStack()activity的后退栈中弹出fragment(这可以模拟后退键引发的动作),用方法addOnBackStackChangedListenner()注册一个侦听器以监视后退栈的变化;

3还可以使用FragmentManager打开一个FragmentTransaction来执行fragment的事务,比如添加、替换或删除fragment

我们用FragmentTransaction来提交事务,每一组Fragment的变化称为事务。add()replace()都是FragmentTransaction的方法。除这两个方法,其中还有remove(),hide()show()方法。

add(int containerViewId, Fragment fragment, String tag);  
remove(Fragment fragment);  
replace(int containerViewId, Fragment fragment); 
hide(Fragment fragment);
show(Fragment fragment);

FragmentActivity通讯,Fragment可以调用getActivity()方法getContext()亦可)很容易的得到它所在的activity的对象FragmentManager可以调用getFragments()获取所有被addActivity中的Fragment  

FragmentManagerFragmentTransaction的获取:

FragmentManager frgmentManager = getFragmentManager();

FragmentTransaction transaction = frgmentManager.benginTransatcion();

四、add()和replace()区别

add()replace()都是FragmentTransaction的方法,用于对Fragment的操作。下面是两者的的区别及应用:

(1)add()方法用于添加新的Fragment;而replace()方法用于替换Fragment

(2)replace()方法替换Fragment,其会先将存在的Fragment删除再添加新的Fragment;而add()方法是直接添加Fragment

(3)replace()方法内存波动比较大,网络请求消耗大;add()方法反之。

(4)add()方法常与hide()show()方法配合使用,add()方法添加Fragment管理后,需要显示时用show()方法显示操作,而不需要时使用hide()方法进行隐藏操作。(注意:使用add()方法常会遇到Ativity被系统回收后重启app导致Fragment重叠现象,之后的动态实现Fragmen会详细说明解决。)

Fragment的静态实现、动态实现和解决重叠问题请看接下来的文章。。。。。。



猜你喜欢

转载自blog.csdn.net/qq_34490018/article/details/80100941