Android在3.0之後引入了Fragment的概念,我猜測其想法可能隻是想更好地相容大螢幕或者平闆的開發,因為大螢幕可以展示更多的内容,而内容一多,邏輯有可能就亂,而利用Fragment,則可以将不同的邏輯封裝進不同的Fragment中,但是展現呢,還是在同一個Activity中,在同一個螢幕上顯示。而對于螢幕并不大的手機來說,如果一個頁面展示的東西并不多,那麼其實将邏輯直接寫在Activity,利用多個Activity實作多個頁面的展示,我覺得也是可以接受的,畢竟用Activity還是用Fragment隻是一種手段的選擇,能夠幫助我們解決問題就好,沒有什麼是一定的。
但是既然Google那麼推薦我們用Fragment,連ADT中預設的建立Activity都會幫我們把實作放到Fragment中,那說明在後面,某些我們不清楚的地方,fragment肯定是有着activity沒有的優勢的,即使Fragment在Fragment之間的跳轉和傳值是比較麻煩的,我們都要學習一下怎麼使用Fragment。
今天這篇博文我們就來學習一下如何使用Fragment,并且直接在Fragment中觸發跳到另一個Fragment中。
1)定義一個Activity:activity_main.xml,内容很簡單,就是放置一個FrameLayout作為Container,如下:
2)定義三個Fragment的布局,如下:
2.1)fragment_main.xml
2.2)fragment_sec.xml 和 fragment_third.xml都跟fragment_main.xml類似,中間隻放置一個按鈕。
這三個布局呢,當我們點選Main的按鈕時,會跳到第二個Fragment,當我們點選第二個Fragment中的按鈕時,就會跳到第三個Fragment,簡單實在。
3)建立三個Fragment執行個體,分别對應上面的三個布局,我們就拿第一個MainFragment來講解一下。
3.1)建立的MainFragment要繼承于Fragment(注意,為了相容2.x的系統,這裡要使用support.v4包裡面的fragment類)。
3.2)定義一個回調接口,且這個接口必須要被包含此Fragment的Activity實作。Fragment之間是沒有辦法互相跳轉的,它們之間所謂的跳轉操作其實是由FragmentManager在主Activity中的添加替換删除等操作組成的,也就是說,其實它們是被操作的,是以如果想在Fragment中觸發跳轉的操作的話,就必須将這個跳轉事件讓Activity知道,由Activity來操作。
3.3)在onAttach方法中,将Activity給強制轉換成第二步實作的接口,如果有異常,說明Activity沒有實作此接口,則會報錯。這一步,隻是為了確定主Activity有實作這個接口,當然,也可以在這裡擷取一個Activity對象,供後面利用。
3.4)定義onCreateView方法,在onCreateView方法中,實始化目前Fragment的布局,并為不同的控件設定不同的響應函數等之類。在這個例子中,我們隻是簡單設定了一個按鈕。
3.5)在按鈕的響應函數中,由于隻有一個按鈕有這個響應函數,是以在這裡并不判斷控件的id,直接調用第二步定義接口的回調函數,即Activity會處理這個響應函數。
一個Fragment主要的實作架構基本上就是這樣,在本頁面上的邏輯,基本上就跟普通的Activity一樣,可以直接處理。隻有當涉及到其他的頁面(Fragment)的時候,我們才需要利用回調接口,來實作過渡。有可能是本個Fragment會被替換成另外一個Fragment,而這隻能由Activity做,沒辦法自殺的。
4)在Activity中加載我們定義的Fragment,并且處理對應Fragment的接口函數,如下:
在上面的Activity中,實作了MainFragmentClickListener和SecondFragmentClickListener,分别是兩個Fragment中定義的接口,而在其對應的實作方法,我們隻是簡單地将一個新的Fragment放到Container中去,
如 onMainButtonClicked,在此方法,我們利用FragmentManager.beginTransaction方法獲得Transaction對象,然後調用其replace方法,将SecondFragment替換掉原來在onCreate時加載的MainFragment對象,最後 commit。
綜合來看,Activity的邏輯是最簡單的,可以說,它沒有什麼業務相關的邏輯,所有業務相關的邏輯應該都在對應的Fragment中實作,而Activity隻是負責不同的Fragment之間的切換。
到這裡,在Activity中利用Fragment來實作App頁面之間跳轉就基本實作了。而這跟普通的app,利用Activity來實作頁面跳轉,其實架構基本上是一樣的,下面就是其運作效果:
結束。