前言:·前一篇已经讲了Fragment的基本使用,那么现在开始深入一点讨论
一、FragmentManager和FragmentTranscation:
在上一篇博客,我们在动态使用Fragment时,已经见到了。再次我们重新回顾一下那段代码:
fm = getFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.container, new FragmentLife());
ft.commit();
注:变量的声明,private FragmentManager fm; private FragmentTransaction ft;
肯定有不少人对这两个类的情况表示迷茫,现在我们简单介绍一下这两个类的情况。
1. FragmentManager:用于管理activity中的fragments, 可通过getFragmentManager()或getSupportFragmentManager()获得。
其常用的方法有:
-
- findFragmentById() #根据ID查找Fragment实例,主要用于静态添加fragment的布局中,因为静态添加的fragment才会有ID
- findFragmentByTag() #根据TAG查找对应的Fragment实例,主要用于在动态添加的fragment中,根据TAG来找到fragment实例
- getFragments() #获取所有被ADD进Activity中的Fragment
2. FragmentTransaction:用来对当前的Fragment进行管理,包括add,replace,remove
其常用的方法有:
-
- add(int containerViewId,Fragment fragment,String tag) # 将一个fragment实例添加到Activity的最上层
- remove(Fragment fragment) # 将一个fragment实例从Activity的fragment队列中删除
- replace(int containerViewId, Fragment fragment) # 替换containerViewId中的fragment实例
注意:该函数会先把containerViewId中所有fragment删除,然后再add进去当前的fragment
-
- hide(Fragment fragment) # 将指定的fragment隐藏不显示
- show(Fragment fragment) # 将以前hide()过的fragment显示出来
- detach(Fragment fragment) # 将view与fragment分离,将此将view从viewtree中删除,将fragment从Activity的ADD队列中移除,但此fragment实例并不会删除,此fragment的状态依然保持着使
- hide(Fragment fragment) # 将指定的fragment隐藏不显示