Android FragmentManage FragmentTransaction介绍
生活随笔
收集整理的這篇文章主要介紹了
Android FragmentManage FragmentTransaction介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
FragmentManage:
FragmentManager能夠實現管理activity中fragment.?通過調用activity的getFragmentManager()取得它的實例.
FragmentManager可以做如下一些事情: 1、使用findFragmentById() (用于在activity layout中提供一個UI的fragment)或findFragmentByTag() ?? (適用于有或沒有UI的fragment)獲取activity中存在的fragment 2、將fragment從后臺堆棧中彈出, 使用 popBackStack() (模擬用戶按下BACK 命令). 3、使用addOnBackStackChangeListener()注冊一個監聽后臺堆棧變化的listener.FragmentTransaction:
????? FragmentTransaction對fragment進行添加,移除,替換,以及執行其他動作。 從 FragmentManager 獲得一個FragmentTransaction的實例 : FragmentManager fragmentManager = getFragmentManager();??FragmentTransaction?fragmentTransaction = fragmentManager.beginTransaction();? 每一個事務都是同時要執行的一套變化.可以在一個給定的事務中設置你想執行的所有變化,使用諸如 add(), remove(), 和 replace().然后, 要給activity應用事務, 必須調用 commit().
? 在調用commit()之前, 你可能想調用 addToBackStack(),將事務添加到一個fragment事務的back stack.?這個back stack由activity管理, 并允許用戶通過按下 BACK 按鍵返回到前一個fragment狀態.
? 舉個例子, 這里是如何將一個fragment替換為另一個, 并在后臺堆棧中保留之前的狀態: // Create?new?fragment and transaction??Fragment newFragment =?new?ExampleFragment();??FragmentTransaction transaction = getFragmentManager().beginTransaction();??// Replace whatever is in the fragment_container view with?this?fragment,??// and add the transaction to the back stack??transaction.replace(R.id.fragment_container, newFragment);?transaction.addToBackStack(null);??// Commit the transaction??transaction.commit();
? 在這個例子中, newFragment 替換了當前layout容器中的由R.id.fragment_container標識的fragment.通過調用 addToBackStack(), replace事務被保存到back stack, 因此用戶可以回退事務,并通過按下BACK按鍵帶回前一個fragment.
? 如果添加多個變化到事務(例如add()或remove())并調用addToBackStack(), 然后在你調用commit()之前的所有應用的變化會被作為一個單個事務添加到后臺堆棧, BACK按鍵會將它們一起回退.
? 添加變化到 FragmentTransaction的順序不重要, 除以下例外:
- 必須最后調用 commit().
- 如果添加多個fragment到同一個容器, 那么添加的順序決定了它們在view hierarchy中顯示的順序.
? 提示: 對于每一個fragment事務, 你可以應用一個事務動畫, 通過在提交事務之前調用setTransition()實現.
? 調用 commit() 并不立即執行事務.恰恰相反, 它將事務安排排期, 一旦準備好, 就在activity的UI線程上運行(主線程).如果有必要, 無論如何, 你可以從你的UI線程調用 executePendingTransactions() 來立即執行由commit()提交的事務.?但這么做通常不必要, 除非事務是其他線程中的job的一個從屬.
? 警告: 你只能在activity保存它的狀態(當用戶離開activity)之前使用commit()提交事務.
? 如果你試圖在那個點之后提交, 會拋出一個異常.這是因為如果activity需要被恢復, 提交之后的狀態可能會丟失.對于你覺得可以丟失提交的狀況, 使用 commitAllowingStateLoss().
?
? ? ?本文轉自xyz_lmn51CTO博客,原文鏈接:http://blog.51cto.com/xyzlmn/817250,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Android FragmentManage FragmentTransaction介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 集成rabbitm
- 下一篇: mailscanner参数