Android FragmentManage FragmentTransaction介紹

來源:互聯網
上載者:User

FragmentManage:

FragmentManager能夠實現管理activity中fragment. 通過調用activity的getFragmentManager()取得它的執行個體.

FragmentManager可以做如下一些事情:
1、使用findFragmentById() (用於在activity layout中提供一個UI的fragment)或findFragmentByTag()    (適用於有或沒有UI的fragment)擷取activity中存在的fragment2、將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的事務時, 如果沒有調用 addToBackStack(), 那麼當事務提交後, 那個fragment會被銷毀,並且使用者不能導航回到它. 有鑒於此, 當移除一個fragment時,如果調用了 addToBackStack(), 那麼fragment會被停止, 如果使用者導航回來,它將會被恢複.提示: 對於每一個fragment事務, 你可以應用一個事務動畫, 通過在提交事務之前調用setTransition()實現.調用 commit() 並不立即執行事務.恰恰相反, 它將事務安排排期, 一旦準備好, 就在activity的UI線程上運行(主線程).如果有必要, 無論如何, 你可以從你的UI線程調用 executePendingTransactions() 來立即執行由commit()提交的事務. 但這麼做通常不必要, 除非事務是其他線程中的job的一個從屬. 警告: 你只能在activity儲存它的狀態(當使用者離開activity)之前使用commit()提交事務.如果你試圖在那個點之後提交, 會拋出一個異常.這是因為如果activity需要被恢複, 提交之後的狀態可能會丟失.對於你覺得可以丟失提交的狀況, 使用 commitAllowingStateLoss().

 

 

 

 

 

 

/**
* @author 張興業
* 郵箱:xy-zhang#163.com
* android開發進階群:278401545
*
*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.