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之間區別
相同點:
不同點:
After replacing Fragment, Activity still detects Fragment is visible
http://blog.csdn.net/mobilexu/article/details/11711865
http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html