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的使用,工欲善其事,必先利其器。


发布评论