Android基礎之使用Fragment控制切換多個頁面
今天來講解Fragment的控制,主要是切換View和頁面替換等操作。還有就是如何取得Fragment的管理對象,以及與Activity的通訊方式。
1、管理Fragment
要在activity中管理fragment,需要使用FragmentManager. 透過呼叫activity的getFragmentManager()取得它的實例.
•可以透過FragmentManager做一些事情, 包括: 使用findragmentById(ragmentById( activity layout中提供一個UI的fragment)或findFragmentByTag()(適用於有或沒有UI的fragment)取得activity中存在的fragment。
•將fragment從後台堆疊彈出, 使用 popBackStack() (模擬使用者按下BACK 指令)。
•使用addOnBackStackChangeListener()註冊一個監聽後台堆疊變化的listener。
2、處理Fragment事務
關於在activity中使用fragment的很強的一個特性是:根據用戶的互動情況,對fragment進行添加、移除、替換以及執行其他動作。提交給activity的每一套變更稱為一個事務,可以使用在FragmentTransaction中的 API 處理。我們也可以保存每一個事務到一個activity管理的backstack,允許用戶經由fragment的變化往回導航(類似於透過 activity往後導航)。
從 FragmentManager 取得一個FragmentTransaction實例:
FragmentManager fragmentManager =getFragmentManager(); FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();
每一個事務都是同時要執行的一套變更。可以在一個給定的事務中設定你想執行的所有變化,使用諸如 add()、remove()和 replace()。然後, 要給activity應用事務,必須呼叫 commit()。
在呼叫commit()之前,你可能想要呼叫 addToBackStack(),將事務加入到一個fragment事務的backstack。這個back stack由activity管理, 並允許使用者透過按下 BACK按鍵返回到前一個fragment狀態。
//创建修改实例 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替換為另一個,並在後台堆疊中保留之前的狀態。在這個範例中,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()提交的交易。但這麼做通常不必要,除非事務是其他執行緒中的任務的一個從屬。
警告:你只能在activity保存它的狀態(當用戶離開activity)之前使用commit()提交事務.
3、與Activity通信
儘管Fragment被實現為一個獨立於Activity的對象,並且可以在多個activity中使用,但一個給定的fragment實例是直接綁定到包含它的activity的。 特別的fragment可以使用 getActivity() 存取Activity實例, 並且容易執行例如在activity layout中尋找一個view的任務。如下面的程式碼:
View listView =getActivity().findViewById(R.id.list);
同樣地,activity可以透過從FragmentManager取得一個到Fragment的參考來呼叫fragment中的方法,使用findFragmentById() 或 findFragmentByTag()。
ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
4、總結
最後需要說一下Fragment的例子,Android官方已經提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo裡面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個程式就好了,不用到處去找。裡面分開不同功能,實作了不同的類別。可根據需要查看具體代碼。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
