2024年5月31日发(作者:)

猿圈

使用FragmentManager和FragmentTransaction

知识解析

FragmentManager

它是用于管理Activity中的Fragment的类

一般通过Activity的getFragmentManager()方法来获得其对

它的主要方法:

 FragmentTransaction

beginTransaction():使用Fragment时,可以通过用户交互来执行一些

动作,比如增加、移除、替换等。所有这些改变构成一个集合,这个

集合被叫做一个transaction。可以调用FragmentTransaction中的方法来

处理这个transaction,并且可以将transaction存进由activity管理的back

stack中,这样用户就可以进行fragment变化的回退操作。这个方法可

以开始一个transaction,并且返回一个FragmentTransaction对象。

 Fragment findFragmentById(int

id):在activity中根据id寻找一个存在的fragment。

 Fragment findFragmentByTag(String

tag):在activity中根据tag寻找一个存在的fragment。

 popBackStack():从fragment堆栈中弹出栈顶的fragment。

猿圈

FragmentTransaction

FragmentTransaction用于处理一系列的Fragment操作,如新增、删除、替换Fra

gment等。

主要方法:

 add(int containerViewId,Fragment

fragment):将fragment加入到容器containerViewId中

 add(Fragment fragment,String tag)

 add(int containerViewId,Fragment fragment,String tag)

 addToBackStack(String

tag):将当前的fragment放入到fragment堆栈中,后续可以使用Fragme

ntManager的popBackStack()取出

attach(Fragment

fragment):将通过detach()从activity中detach的fragment重新附加(attach

)到activity。

detach(Fragment fragment):解除fragment

remove(Fragment fragment):移除fragment

replace(int containerViewId, Fragment fragment, String

tag):将containerViewId对应的容器中的fragment替换成fragment,并

设置tag。

replace(int containerViewId, Fragment fragment)

show(Fragment fragment):显示fragment

hide(Fragment fragment):隐藏fragment

猿圈

commit():这个方法在前面的这些方法调用后必须调用,让以上的改变

真正生效。

动态实例化

Fragment

的时机

如果activity发生配置变化(比如旋转屏幕)时,它将重新创建activity,并

且会自动实例化已经存在的fragments

为了避免重复创建fragment,如果在te()中动态创建fragmen

t,那么可以判断是新创建activity还是因为配置发生变化而重新创建activity,

可以根据onCreate()中的Bundle参数是否为空来判断:

if(savedInstanceState == null){

//创建fragment

}

猿圈

功能演示

实战操作

public class MainActivity extends Activity {

FragmentTransaction trans;

FragmentManager mgr;

@Override

protected void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

setContentView(ty_main);

mgr = gmentManager();

}

public void add(View view) {

猿圈

trans = ransaction();

MyFragment fragment = new MyFragment();

(Layout, fragment, "fragment");

();

}

public void del(View view) {

Fragment fragment = agmentByTag("fragment");

n();

if (fragment != null) {

trans = ransaction();

(fragment);

();

}

}

}

职业素质

FragementManager可以完成如下几方面功能

使用findFragementById()或者findFragmentBuyTag()方法获取制定Fragme

nt

使用popBackStack方法将Fragement从后台栈中弹出

调用addOnBackStackChangeListener()注册一个监听器,由于监听后台栈

变化。

为更好更方便的使用Fragment就必须熟练掌握FragmentManager和Fragment

Transaction的使用,工欲善其事,必先利其器。