Android入門筆記之Fragment
<1>簡介
Fragments 設計理念
在設計應用時特別是Android 應用,有衆多的分辨率要去適應,而fragments 可以讓你在屏幕不同的屏幕上動態管理UI。例如:通訊應用程序(QQ),用戶列表可以在左邊,消息窗口在右邊的設計。而在手機屏幕用戶列表填充屏幕當點擊某一用戶時,則彈出對話窗口的設計,如下圖:
Fragments的生命週期
每一個fragments都有自己的一套生命週期回調方法和處理自己的用戶輸入事件。對應生命週期可參考下圖:
其中大多數程序必須使用Fragments 必須實現的三個回調方法分別爲:
onCreate
系統創建Fragments時調用,可做執行初始化工作或者當程序被暫停或停止時用來恢復狀態,跟Activity 中的onCreate相當。
onCreateView
用於首次繪製用戶界面的回調方法,必須返回要創建的Fragments 視圖UI。假如你不希望提供Fragments 用戶界面則可以返回NULL。
onPause
當用戶離開這個Fragments 的時候調用,這時你要提交任何應該持久的變化,因爲用戶可能不會回來。更多的事件可以參考上圖的生命週期關係圖。
Fragments 的類別
系統內置了三種Fragments ,這三種Fragments 分別有不同的應用場景分別爲:
DialogFragment
對話框式的Fragments,可以將一個fragments對話框併到activity 管理的fragments backstack 中,允許用戶回到一個前曾摒棄fragments.
ListFragments
類似於ListActivity的效果,並且還提供了ListActivity 類似的onListItemCLick和setListAdapter等功能。
PreferenceFragments
類似於PreferenceActivity.可以創建類似IPAD的設置界面。
<2>關鍵步驟
使用android內置的fragment模板來進行熟悉。
其中DummyContent只是負責提供List的數據。
Activity_item_twopane.xml負責提供雙面板模式的佈局。
加載fragment有兩種方式:
1、在佈局文件中使用fragment標籤,通過android:name來進行綁定。
如activity_item_list不居中的fragment綁定了ItemListFragment。而它繼承了ListFragment。
2、第二種方式
通過 FragmentTransaction對fragment進行添加,移除,替換,以及執行其他動作。
從 FragmentManager 獲得一個FragmentTransaction的實例 :
FragmentManagerfragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
每一個事務都是同時要執行的一套變化.可以在一個給定的事務中設置你想執行的所有變化,使用諸如 add(), remove(), 和 replace().然後, 要給activity應用事務, 必須調用 commit().
在調用commit()之前, 你可能想調用 addToBackStack(),將事務添加到一個fragment事務的back stack. 這個back stack由activity管理, 並允許用戶通過按下 BACK 按鍵返回到前一個fragment狀態.
<3>出現的問題
Xml文件中tools:context=".ItemListActivity"屬性表示什麼?
tools:context="activityname"這一句不會被打包進APK。只是ADT的Layout Editor在你當前的Layout文件裏面設置對應的渲染上下文,說明你當前的Layout所在的渲染上下文是activity name對應的那個activity,如果這個activity在manifest文件中設置了Theme,那麼ADT的Layout Editor會根據這個Theme來渲染你當前的Layout。就是說如果你設置的MainActivity設置了一個Theme.Light(其他的也可以),那麼你在可視化佈局管理器裏面看到的背景阿控件阿什麼的就應該是Theme.Light的樣子。僅用於給你看所見即所得的效果而已。
單雙面板模式:
根據您的應用當前顯示的佈局,用戶界面流程可能會有所不同。例如,如果您的應用處於雙面板模式下,點擊左側面板上的項即可直接在右側面板上顯示相關內容;如果該應用處於單面板模式下,相關內容就應以其他活動的形式在同一面板上顯示。
那麼機器如何知道何時切換模式呢?
通過在value-large中增加布局別名(layoutaliases)是機器知道如何切換
<4>代碼及解釋
無