欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學堂Android培訓基礎(chǔ)之使用Fragment控制切換多個頁面

2018-07-20 13:31:34 1534瀏覽

今天扣丁學堂Android培訓給大家講解一下Fragment的控制,主要是切換View和頁面替換等操作。還有就是如何獲取Fragment的管理對象,以及與Activity的通信方式。



1、管理Fragment

要在activity中管理fragment,需要使用FragmentManager.通過調(diào)用activity的getFragmentManager()取得它的實例.

可以通過FragmentManager做一些事情,包括:使用findFragmentById()(用于在activitylayout中提供一個UI的fragment)或findFragmentByTag()(適用于有或沒有UI的fragment)獲取activity中存在的fragment。

將fragment從后臺堆棧中彈出,使用popBackStack()(模擬用戶按下BACK命令)。

使用addOnBackStackChangeListener()注冊一個監(jiān)聽后臺堆棧變化的listener。

2、處理Fragment事務(wù)

關(guān)于在activity中使用fragment的很強的一個特性是:根據(jù)用戶的交互情況,對fragment進行添加、移除、替換以及執(zhí)行其他動作。提交給activity的每一套變化被稱為一個事務(wù),可以使用在FragmentTransaction中的API處理。我們也可以保存每一個事務(wù)到一個activity管理的backstack,允許用戶經(jīng)由fragment的變化往回導航(類似于通過activity往后導航)。

從FragmentManager獲得一個FragmentTransaction實例:

復制代碼代碼如下:

FragmentManagerfragmentManager=getFragmentManager();
FragmentTransactionfragmentTransaction=fragmentManager.beginTransaction();

每一個事務(wù)都是同時要執(zhí)行的一套變化。可以在一個給定的事務(wù)中設(shè)置你想執(zhí)行的所有變化,使用諸如add()、remove()和replace()。然后,要給activity應用事務(wù),必須調(diào)用commit()。

在調(diào)用commit()之前,你可能想調(diào)用addToBackStack(),將事務(wù)添加到一個fragment事務(wù)的backstack。這個backstack由activity管理,并允許用戶通過按下BACK按鍵返回到前一個fragment狀態(tài)。

復制代碼代碼如下:

//創(chuàng)建修改實例
FragmentnewFragment=newExampleFragment();
FragmentTransactiontransaction=getFragmentManager().beginTransaction();
//Replacewhateverisinthefragment_containerviewwiththisfragment,
//andaddthetransactiontothebackstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
//提交修改
transaction.commit();

上面是如何將一個fragment替換為另一個,并在后臺堆棧中保留之前的狀態(tài)。在這個例子中,newFragment替換了當前l(fā)ayout容器中的由R.id.fragment_container標識的fragment。通過調(diào)用addToBackStack(),replace事務(wù)被保存到backstack,因此用戶可以回退事務(wù),并通過按下BACK按鍵帶回前一個fragment。

如果添加多個變化到事務(wù)(例如add()或remove())并調(diào)用addToBackStack(),然后在你調(diào)用commit()之前的所有應用的變化會被作為一個單個事務(wù)添加到后臺堆棧,BACK按鍵會將它們一起回退。添加變化到FragmentTransaction的順序不重要,除以下例外:

必須最后調(diào)用commit()

如果添加多個fragment到同一個容器,那么添加的順序決定了它們在viewhierarchy中顯示的順序

當執(zhí)行一個移除fragment的事務(wù)時,如果沒有調(diào)用addToBackStack(),那么當事務(wù)提交后,那個fragment會被銷毀,并且用戶不能導航回到它。有鑒于此,當移除一個fragment時,如果調(diào)用了addToBackStack(),那么fragment會被停止,如果用戶導航回來,它將會被恢復。另外,對于每一個fragment事務(wù),你可以應用一個事務(wù)動畫,通過在提交事務(wù)之前調(diào)用setTransition()實現(xiàn)。

調(diào)用commit()并不立即執(zhí)行事務(wù)。恰恰相反,它將事務(wù)安排排期,一旦準備好,就在activity的UI線程上運行(主線程)。如果有必要,無論如何,你可以從你的UI線程調(diào)用executePendingTransactions()來立即執(zhí)行由commit()提交的事務(wù)。但這么做通常不必要,除非事務(wù)是其他線程中的任務(wù)的一個從屬。

警告:你只能在activity保存它的狀態(tài)(當用戶離開activity)之前使用commit()提交事務(wù).

3、與Activity通信

盡管Fragment被實現(xiàn)為一個獨立于Activity的對象,并且可以在多個activity中使用,但一個給定的fragment實例是直接綁定到包含它的activity的。特別的fragment可以使用getActivity()訪問Activity實例,并且容易地執(zhí)行比如在activitylayout中查找一個view的任務(wù)。如下面的代碼:

復制代碼代碼如下:

ViewlistView=getActivity().findViewById(R.id.list);

同樣地,activity可以通過從FragmentManager獲得一個到Fragment的引用來調(diào)用fragment中的方法,使用findFragmentById()或findFragmentByTag()。

復制代碼代碼如下:

ExampleFragmentfragment=(ExampleFragment)getFragmentManager().findFragmentById(R.id.example_fragment);

以上就是關(guān)于扣丁學堂Android培訓基礎(chǔ)之使用Fragment控制切換多個頁面例子的詳細介紹,Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的APIDemo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看APIDemo那個程序就可以了,不用到處去找。里面分開不同功能,實現(xiàn)了不同的類。可以根據(jù)需要查看具體代碼。

扣丁學堂微信公眾號



【關(guān)注微信公眾號獲取更多學習資料】



查看更多關(guān)于“Android開發(fā)技術(shù)的相關(guān)資訊>>

標簽: Android學習路線圖 Android培訓 Android開發(fā)工程師 Android視頻教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部