Android基礎(chǔ)之使用Fragment控制切換多個頁面
今天講解一下Fragment的控制,主要是切換View和頁面替換等操作。還有就是如何獲取Fragment的管理對象,以及與Activity的通信方式。
1、管理Fragment
要在activity中管理fragment,需要使用FragmentManager. 通過調(diào)用activity的getFragmentManager()取得它的實(shí)例.
•可以通過FragmentManager做一些事情, 包括: 使用findFragmentById()(用于在activity layout中提供一個UI的fragment)或findFragmentByTag()(適用于有或沒有UI的fragment)獲取activity中存在的fragment。
•將fragment從后臺堆棧中彈出, 使用 popBackStack() (模擬用戶按下BACK 命令)。
•使用addOnBackStackChangeListener()注冊一個監(jiān)聽后臺堆棧變化的listener。
2、處理Fragment事務(wù)
關(guān)于在activity中使用fragment的很強(qiáng)的一個特性是:根據(jù)用戶的交互情況,對fragment進(jìn)行添加、移除、替換以及執(zhí)行其他動作。提交給activity的每一套變化被稱為一個事務(wù),可以使用在FragmentTransaction中的 API 處理。我們也可以保存每一個事務(wù)到一個activity管理的backstack,允許用戶經(jīng)由fragment的變化往回導(dǎo)航(類似于通過 activity往后導(dǎo)航)。
從 FragmentManager 獲得一個FragmentTransaction實(shí)例:
FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();
每一個事務(wù)都是同時要執(zhí)行的一套變化。可以在一個給定的事務(wù)中設(shè)置你想執(zhí)行的所有變化,使用諸如 add()、remove()和 replace()。然后, 要給activity應(yīng)用事務(wù),必須調(diào)用 commit()。
在調(diào)用commit()之前,你可能想調(diào)用 addToBackStack(),將事務(wù)添加到一個fragment事務(wù)的backstack。這個back stack由activity管理, 并允許用戶通過按下 BACK按鍵返回到前一個fragment狀態(tài)。
//創(chuàng)建修改實(shí)例
Fragment newFragment = newExampleFragment();
FragmentTransaction transaction =getFragmentManager().beginTransaction();
// Replace whatever is in thefragment_container view with this fragment,
// and add the transaction to the backstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
//提交修改
transaction.commit();
上面是如何將一個fragment替換為另一個,并在后臺堆棧中保留之前的狀態(tài)。在這個例子中,newFragment替換了當(dāng)前l(fā)ayout容器中的由R.id.fragment_container標(biāo)識的fragment。通過調(diào)用 addToBackStack(), replace事務(wù)被保存到back stack,因此用戶可以回退事務(wù),并通過按下BACK按鍵帶回前一個fragment。
如果添加多個變化到事務(wù)(例如add()或remove())并調(diào)用addToBackStack(),然后在你調(diào)用commit()之前的所有應(yīng)用的變化會被作為一個單個事務(wù)添加到后臺堆棧,BACK按鍵會將它們一起回退。添加變化到 FragmentTransaction的順序不重要, 除以下例外:
•必須最后調(diào)用 commit()
•如果添加多個fragment到同一個容器, 那么添加的順序決定了它們在view hierarchy中顯示的順序
當(dāng)執(zhí)行一個移除fragment的事務(wù)時, 如果沒有調(diào)用 addToBackStack(), 那么當(dāng)事務(wù)提交后,那個fragment會被銷毀,并且用戶不能導(dǎo)航回到它。有鑒于此,當(dāng)移除一個fragment時,如果調(diào)用了addToBackStack(), 那么fragment會被停止,如果用戶導(dǎo)航回來,它將會被恢復(fù)。另外,對于每一個fragment事務(wù),你可以應(yīng)用一個事務(wù)動畫,通過在提交事務(wù)之前調(diào)用setTransition()實(shí)現(xiàn)。
調(diào)用 commit() 并不立即執(zhí)行事務(wù)。恰恰相反,它將事務(wù)安排排期, 一旦準(zhǔn)備好,就在activity的UI線程上運(yùn)行(主線程)。如果有必要, 無論如何,你可以從你的UI線程調(diào)用executePendingTransactions()來立即執(zhí)行由commit()提交的事務(wù)。但這么做通常不必要,除非事務(wù)是其他線程中的任務(wù)的一個從屬。
警告:你只能在activity保存它的狀態(tài)(當(dāng)用戶離開activity)之前使用commit()提交事務(wù).
3、與Activity通信
盡管Fragment被實(shí)現(xiàn)為一個獨(dú)立于Activity的對象,并且可以在多個activity中使用,但一個給定的fragment實(shí)例是直接綁定到包含它的activity的。 特別的fragment可以使用 getActivity() 訪問Activity實(shí)例, 并且容易地執(zhí)行比如在activity layout中查找一個view的任務(wù)。如下面的代碼:
View listView =getActivity().findViewById(R.id.list);
同樣地,activity可以通過從FragmentManager獲得一個到Fragment的引用來調(diào)用fragment中的方法,使用findFragmentById() 或 findFragmentByTag()。
ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
4、總結(jié)
最后需要說一下Fragment的例子,Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個程序就可以了,不用到處去找。里面分開不同功能,實(shí)現(xiàn)了不同的類??梢愿鶕?jù)需要查看具體代碼。
- Android基礎(chǔ)之Fragment與Activity交互詳解
- Android中fragment嵌套fragment問題解決方法
- Android程序開發(fā)之Fragment實(shí)現(xiàn)底部導(dǎo)航欄實(shí)例代碼
- Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用
- Android Fragment 基本了解(圖文介紹)
- Android fragment實(shí)現(xiàn)多個頁面切換效果
- Android 管理Activity中的fragments
- Fragment里添加ListView不要用ListFragment
- FrameLayout和Fragment處理Android應(yīng)用UI布局實(shí)例
- 安卓開發(fā)之FragmentPagerAdapter和FragmentStatePagerAdapter詳解
相關(guān)文章
Java程序員轉(zhuǎn)Android開發(fā)必讀經(jīng)驗(yàn)一份
小編最近幾日偷偷的發(fā)現(xiàn)部分Java程序員想轉(zhuǎn)安卓開發(fā),故此加緊補(bǔ)充知識,為大家搜集資料,積極整理前人的經(jīng)驗(yàn),希望可以給正處于困惑中的你,帶來些許的幫助。2017-11-11
安卓應(yīng)用開發(fā)通過java調(diào)用c++ jni的圖文使用方法
這篇文章主要介紹了2013-11-11
Android 實(shí)現(xiàn)高斯模糊效果且兼容低版本
這篇文章主要介紹了Android 實(shí)現(xiàn)高斯模糊效果且兼容低版本的相關(guān)資料,本文圖文并茂介紹的非常詳細(xì),需要的朋友可以參考下2016-09-09
Android自定義View實(shí)現(xiàn)等級滑動條的實(shí)例
這篇文章主要介紹了 Android自定義View實(shí)現(xiàn)等級滑動條的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android自定義View實(shí)現(xiàn)簡單文字描邊功能
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)簡單文字描邊功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
搭建簡易藍(lán)牙定位系統(tǒng)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄罱ê喴姿{(lán)牙定位系統(tǒng)的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03

