标签:
Fragment 相关API
getSupportFragmentManager().popBackStack()
getFragmentManager().getBackStackEntryCount 其是操作谁的,当一个activity初次显示的时候,其是0还是1.
Fragment 具体有几个stack, 前端界面显示stack, 和后端缓存的stack
backStack 其属于哪一个stack
Activity, fragment, stack 其之间的关联是什么
FragmentManager的作用
1. 代activity管理所有fragment行为操作. 反过来推论:要想以于Fragment与activity发生关联,就必须通过fragmentManager
2. 具体操作: 对于activity当中所有fragment进行删改查
3.fragmentManger:以stack这种数据结构来管理所有Fragment.为什么要用stack.界面的切换一般均要stack的方式进行的。如进入返回
activity当中有几种类型的fragment呢。这几种类型之间的关联。相关的操作API是什么。
1. 一个activity可以同时显示多个fragment, 这是也就是有些操作,不方便统一实现 ,如Fragment来直接处理backpress, activity并不能直接知道当中前哪些Fragment是可视的,或者唯一可视的。
4. 查:findFragmentById()或findFragmentByTag() 是用来查找activity当中的fragment, 要查找的时候,就可以使用这个方法。
其在哪里面查找: 应该是backstack当中。推论: 每一个activity其只是是backstack. 当前fragment在backstack当中没有
5.删除: 删除哪个,为什么会要删除, 删除:回退删除,指定删除
popBackStack(): 回退删除,注意此方法为异步方法,其只是就请求发送到消息队列当中,当这个动作直到应用回到事件循环当中才执行。注意:如果此时队列当中还有对于fragment操作,可能会引起异常,我就遇到了java.lang.IllegalStateException: Fragment already added。 程序当中的具体业务在对于fragment进行操作的时候,要添加判断。
6. 增: add, remove, show,hide 其之间的相同点,不同点,各自的应用场景
且注意:与addToBackStack之间的关联,如add 与addToBackStack
如: 当前为A fragment 需要切换到B fragment
相同点: 均是将B对于activity当中
不同点: 对于A的处理
对于:add方式
1. 当前fragment
2. fragment popbackstack 与backkey
getSupportFragmentManager().
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.add()
ft.addToBackStack(null): 为什么是传入null
ft.commit()
manager.popBackStackImmediate()
1. popBackStack 与addToBackStack一定要匹配使用,
注意:当在切换fragment的时候,没有将之前的fragment加入到backStack,那调用popBackStack就不会有作用,界面效果就是没有切换。
2. replace与addToBackStack 和add与addToBackStack之间区别
相同点:
不同点:
http://blog.csdn.net/mobilexu/article/details/11711865
http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html
http://blog.csdn.net/liu470368500/article/details/38145601
java.lang.IllegalStateException: Fragment already added:
标签:
原文地址:http://www.cnblogs.com/pengxinglove/p/4378611.html