android Fragments詳解四:管理fragment
要管理fragment們,需使用FragmentManager,要獲取它,需在activity中呼叫方法getFragmentManager()。
你可以用FragmentManager來做以上事情:
1使用方法findFragmentById()或findFragmentByTag(),獲取activity中已存在的fragment們。
2使用方法popBackStack()從activity的後退棧中彈出fragment們(這可以模擬後退鍵引發的動作)。
3用方法addOnBackStackChangedListerner()註冊一個偵聽器以監視後退棧的變化。
更多關於以上方法的資訊,請參考“FragmentManager”文件。
就像前面章節所演示的,你還可以使用FragmentManager開啟一個FragmentTransaction來執行fragment的事務,比如新增或刪除fragment。
執行Fragment的事務
在activity中使用fragment的一個偉大的好處是能跟據使用者的輸入對fragment進行新增、刪除、替換以及執行其它動作的能力。你提交的一組fragment的變化叫做一個事務。事務通過FragmentTransaction來執行。你還可以把每個事務儲存在activity的後退棧中,這樣就可以讓使用者在fragment變化之間導航(跟在activity之間導航一樣)。
你可以通過FragmentManager來取得FragmentTransaction的例項,如下:
FragmentManagerfragmentManager=getFragmentManager();
FragmentTransactionfragmentTransaction=fragmentManager.beginTransaction();
一個事務是在同一時刻執行的一組動作(很像資料庫中的事務)。你可以用add(),remove(),replace()等方法構成事務,最後使用commit()方法提交事務。
在呼叫commint()之前,你可以用addToBackStack()把事務新增到一個後退棧中,這個後退棧屬於所在的activity。有了它,就可以在使用者按下返回鍵時,返回到fragment們執行事務之前的狀態。
如下例:演示瞭如何用一個fragment代替另一個fragment,同時在後退棧中儲存被代替的fragment的狀態。
//Create new fragment and transaction
FragmentnewFragment=newExampleFragment();
FragmentTransactiontransaction=getFragmentManager().beginTransaction();
//Replace whatever is in the fragment_container view with thisfragment,
//and add the transaction to the backstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
//Commit the transaction
transaction.commit();
解釋:newFragment代替了控制元件IDR.id.fragment_container所指向的ViewGroup中所含的任何fragment。然後呼叫addToBackStack(),此時被代替的fragment就被放入後退棧中,於是當使用者按下返回鍵時,事務發生回溯,原先的fragment又回來了。
如果你向事務新增了多個動作,比如多次呼叫了add(),remove()等之後又呼叫了addToBackStack()方法,那麼所有的在commit()之前呼叫的方法都被作為一個事務。當使用者按返回鍵時,所有的動作都被反向執行(事務回溯)。
事務中動作的執行順序可隨意,但要注意以下兩點:
1你必須最後呼叫commit()。
2如果你新增了多個fragment,那麼它們的顯示順序跟新增順序一至(後顯示的覆蓋前面的)。
如果你在執行的事務中有刪除fragment的動作,而且沒有呼叫addToBackStack(),那麼當事務提交時,那些被刪除的fragment就被銷燬了。反之,那些fragment就不會被銷燬,而是處於停止狀態。當使用者返回時,它們會被恢復。
密技:對於fragment事務,你可以應用動畫。在commit()之前呼叫setTransition()就行。――一般銀我不告訴他哦。
但是,呼叫commit()後,事務並不會馬上執行。它會在activity的UI執行緒(其實就是主執行緒)中等待直到執行緒能執行的時候才執行(廢話)。如果必要,你可以在UI執行緒中呼叫executePendingTransactions()方法來立即執行事務。但一般不需這樣做,除非有其它執行緒在等待事務的執行。
警告:你只能在activity處於可儲存狀態的狀態時,比如running中,onPause()方法和onStop()方法中提交事務,否則會引發異常。這是因為fragment的狀態會丟失。如果要在可能丟失狀態的情況下提交事務,請使用commitAllowingStateLoss()。
轉自:http://blog.csdn.net/niu_gao/article/details/7172483
相關文章
- android Fragments詳解二:建立FragmentAndroidFragment
- android Fragments詳解三:實現Fragment的介面AndroidFragment
- android Fragments詳解一:概述AndroidFragment
- Android_Fragment_Fragment詳解AndroidFragment
- android Fragments詳解七:fragement示例AndroidFragment
- android Fragments詳解五:與activity通訊AndroidFragment
- Android中使用FragmentManager管理fragmentsAndroidFragment
- Fragment詳解Fragment
- android Fragments詳解六:處理fragement的生命週期AndroidFragment
- Android 碎片(Fragment)講解AndroidFragment
- Fragment:關於Avoid non-default constructors in fragments的錯誤FragmentStruct
- android Fragment與Activity互動,互相發資料(附圖詳解)AndroidFragment
- 詳解Android中的四大元件之一:Activity詳解Android元件
- Android之FragmentAndroidFragment
- 理解 Android FragmentAndroidFragment
- Android Fragment用法知識點的講解AndroidFragment
- Android中Fragment巢狀Fragment,切換Fragment時不顯示檢視的原因及解決方法AndroidFragment巢狀
- Android 3.0開始引入fragments(碎片、片段)類AndroidFragment
- Android Activity的四大啟動模式詳解Android模式
- Android四大檢視動畫圖文詳解Android動畫
- (四)詳解RLHF
- Android基礎—FragmentAndroidFragment
- Android Fragment 深度解析AndroidFragment
- Android官方架構元件Navigation:大巧不工的Fragment管理框架Android架構元件NavigationFragment框架
- Android--單Activity+多Fragment,玩轉FragmentAndroidFragment
- Android開發教程 - 使用Data Binding(四)在Fragment中的使用AndroidFragment
- Android中點選事件的四種寫法詳解Android事件
- 【Android Fragment】友盟統計 Fragment 頁面顯示隱藏的完美解決方案AndroidFragment
- Navigation問題詳解——Fragment建立新的例項NavigationFragment
- android.support.v4.app.Fragment vs android.app.Fragment 的區別AndroidAPPFragment
- 在Android Studio中利用List Fragments建立相簿GalleryAndroidFragment
- 第四章 Fragment專題Fragment
- 【Android Fragment】解決Fragment多層巢狀時onActivityResult無法正確回撥的問題AndroidFragment巢狀
- caddy(四)Run 詳解
- Android 點將臺:撒豆成兵[- Fragment -]AndroidFragment
- Android Jetpack - Fragment官方說明AndroidJetpackFragment
- Android面試題之Fragment篇Android面試題Fragment
- Android Fragment 間物件傳遞AndroidFragment物件