在Activity中通过getFragmentManager(v4包中使用getSupportFragmentmanager)方法获取到FragmentManager;
使用
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();开启一个事务
使用transaction对fragment进行基本操作
transaction.add();添加一个fragment
transaction.remove();移除一个fragment,remove()会将这个实力彻底移除,(fragment加入回退栈情况除外)
transaction.replace();替换当前的fragment
transaction.hide();设为不可见,不会被销毁
transaction.show();将隐藏的fragment 设为可见
transaction.detach();将view总UI中移除,不同于remove,fragment还有可以有fragmentManager进行管理
transaction.attch();将view附加到UI上并进行显示
transaction.commite();提交一个事务
commit方法一定要在Activity.onSaveInstance()之前调用,否则会报State loss这样的错误;
fragment切换时需要保存页面上的输入信息等需要使用hide()和show();不需要保留可以使用add,remove或者replace;
remove和detach的区别在于,remove会销毁fragment的实例,detach会销毁视图结构不会销毁其实例;
添加fragment 进入回退栈中的方法是transaction.addToBackStack(fragment);可以向activity一个退回前一个fragment;
fragment与activity之间的通信
如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。
在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。