最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android基礎(chǔ)之使用Fragment控制切換多個(gè)頁(yè)面

 更新時(shí)間:2013年07月30日 09:14:07   作者:  
Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個(gè)程序就可以了,不用到處去找。里面分開(kāi)不同功能,實(shí)現(xiàn)了不同的類

今天講解一下Fragment的控制,主要是切換View和頁(yè)面替換等操作。還有就是如何獲取Fragment的管理對(duì)象,以及與Activity的通信方式。

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

•可以通過(guò)FragmentManager做一些事情, 包括: 使用findFragmentById()(用于在activity layout中提供一個(gè)UI的fragment)或findFragmentByTag()(適用于有或沒(méi)有UI的fragment)獲取activity中存在的fragment。
•將fragment從后臺(tái)堆棧中彈出, 使用 popBackStack() (模擬用戶按下BACK 命令)。
•使用addOnBackStackChangeListener()注冊(cè)一個(gè)監(jiān)聽(tīng)后臺(tái)堆棧變化的listener。

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

從 FragmentManager 獲得一個(gè)FragmentTransaction實(shí)例:

復(fù)制代碼 代碼如下:

FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();

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

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

復(fù)制代碼 代碼如下:

//創(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();

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

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

•必須最后調(diào)用 commit()
•如果添加多個(gè)fragment到同一個(gè)容器, 那么添加的順序決定了它們?cè)趘iew hierarchy中顯示的順序

當(dāng)執(zhí)行一個(gè)移除fragment的事務(wù)時(shí), 如果沒(méi)有調(diào)用 addToBackStack(), 那么當(dāng)事務(wù)提交后,那個(gè)fragment會(huì)被銷毀,并且用戶不能導(dǎo)航回到它。有鑒于此,當(dāng)移除一個(gè)fragment時(shí),如果調(diào)用了addToBackStack(), 那么fragment會(huì)被停止,如果用戶導(dǎo)航回來(lái),它將會(huì)被恢復(fù)。另外,對(duì)于每一個(gè)fragment事務(wù),你可以應(yīng)用一個(gè)事務(wù)動(dòng)畫(huà),通過(guò)在提交事務(wù)之前調(diào)用setTransition()實(shí)現(xiàn)。

調(diào)用 commit() 并不立即執(zhí)行事務(wù)。恰恰相反,它將事務(wù)安排排期, 一旦準(zhǔn)備好,就在activity的UI線程上運(yùn)行(主線程)。如果有必要, 無(wú)論如何,你可以從你的UI線程調(diào)用executePendingTransactions()來(lái)立即執(zhí)行由commit()提交的事務(wù)。但這么做通常不必要,除非事務(wù)是其他線程中的任務(wù)的一個(gè)從屬。
警告:你只能在activity保存它的狀態(tài)(當(dāng)用戶離開(kāi)activity)之前使用commit()提交事務(wù).
 
3、與Activity通信
盡管Fragment被實(shí)現(xiàn)為一個(gè)獨(dú)立于Activity的對(duì)象,并且可以在多個(gè)activity中使用,但一個(gè)給定的fragment實(shí)例是直接綁定到包含它的activity的。 特別的fragment可以使用 getActivity() 訪問(wèn)Activity實(shí)例, 并且容易地執(zhí)行比如在activity layout中查找一個(gè)view的任務(wù)。如下面的代碼:

復(fù)制代碼 代碼如下:

View listView =getActivity().findViewById(R.id.list);

同樣地,activity可以通過(guò)從FragmentManager獲得一個(gè)到Fragment的引用來(lái)調(diào)用fragment中的方法,使用findFragmentById() 或 findFragmentByTag()。
復(fù)制代碼 代碼如下:

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

4、總結(jié)
最后需要說(shuō)一下Fragment的例子,Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個(gè)程序就可以了,不用到處去找。里面分開(kāi)不同功能,實(shí)現(xiàn)了不同的類??梢愿鶕?jù)需要查看具體代碼。

相關(guān)文章

最新評(píng)論

壤塘县| 上饶县| 乌恰县| 同仁县| 宜阳县| 方正县| 札达县| 左贡县| 新河县| 修武县| 黄龙县| 漳浦县| 冕宁县| 左云县| 郑州市| 耒阳市| 铜梁县| 田林县| 修文县| 施甸县| 阿克苏市| 湖北省| 惠州市| 封开县| 井研县| 旺苍县| 宣汉县| 镇康县| 虞城县| 兖州市| 丹巴县| 福州市| 开原市| 湟源县| 平武县| 全州县| 铜陵市| 南京市| 台安县| 昆明市| 句容市|