也談Android中的界面切換

我們在進行安卓程序開發的時候,經常會用到切換界面,至於爲什麼要轉換界面,可能有各種各樣的原因,不是一言兩語能說清楚的,此處略過不表,當需要切換界面時,我們通常有以下幾種方式來實現:

1.Activity的切換,我們最初學習且最常用的界面轉換莫過於Activity的切換了。Activity的切換自帶轉場動畫,並啓動一個新的Activity,在新的Activity上面,我們可以加載全新的佈局,包括進行其他我們想要的操作。具體步驟:首先創建一個意圖,通過這個意圖來尋找並啓動Activity,如果是顯示意圖,直接啓動指定的Activity即可;若是隱式意圖,則尋找符合條件的Activity,通過intent-filter裏面的action屬性來匹配,找到符合條件的則啓動Activity。

這種轉換界面的的優點是顯而易見的,首先,操作方便,沒有許多繁瑣的步驟,通過創建意圖就能實現界面的轉換;其次過程清晰明瞭,基本按照從上到下的順序執行代碼就行;而且,參數或數據的傳遞簡單,最多就是傳遞序列化的對象而已。


2.Activity上面Fragment的切換。Fragment是Android3.0推出的新特性,意義是“碎片”,大體上具備Activity的功能,可以理解爲Activity的片段,具有和Activity類似的生命週期。谷歌推薦在需要多個佈局並存的時候使用Fragment,Fragment依賴於Activity存在,其生命週期包含在Activity的生命週期之內,但是比Activity的生命週期有着更多的階段,除了本身的創建,啓動,暫停,停止和銷燬以外,還有依附於Activity的一些生命週期特徵,可以通過碎片管理器來對Activity上的Fragment進行管理。

如何利用Fragment進行界面的切換?首先,既然是切換,肯定涉及多個界面,假定一個Fragment佔據完整的Activity視窗,那麼在這些不同的Fragment之間進行切換就實現了界面的切換。首先需要創建Fragment集合List<Fragment> list,然後獲得基於Activity的Fragment管理對象FragmentManager,通過管理對象開啓事務獲取Fragment事務對象,FragmentTransaction,事務對象有add,replace等方法來對Fragment進行添加,替換等操作。

這種轉換界面的方式在複雜的界面佈局上最爲谷歌所推薦,並有很多針對於Fragment的官方框架,例如support-v4包下的ViewPager等等。這種轉換界面既然是官方推薦的,我們自然應當努力善用,優點太多了,就不細說了。


3.Activity或者Fragment上的動畫翻轉。其實以前兩種來實現界面的轉換已經十分夠用了,但我們要注意到,Activity是Android的核心組件,Fragment也至少是一個佈局,在實現它們的時候,Android的底層框架需要做很多事情,可能我們並不完全知道,也不關心Android Framework到底做了什麼。事實上,Android Framework通過reflect把我們的XML文件加載並顯示,並監聽相應的事件,啓動並操作一個Activity對系統資源有着可觀的消耗,有時候並不一定是最佳的選擇。至於Fragment,由於這個組件的特殊性,在和Activity進行數據或參數傳遞的時候有一些限制性,一般的處理方式有:1)創建Activity的成員變量,可由不同的Fragment來訪問和操作;2)通過setArguments和getArguments來傳遞參數,但這種參數傳遞方式很不靠譜,用了就知道了;3)在Fragment中設置回調接口,然後由Activity來實現這個回調接口,從而實現Activity和Fragment,或者Fragment 之間的參數傳遞,這種方式效率最高,但是理解起來有一定難度,而且能處理的事情有限,一般來說一個Fragment只能設置一個回調接口,Activity實現接口的時候,如果多重實現可能會導致邏輯混亂,也不太好處理。

所謂第3種解決方案就是,Activity或者Fragment只有一個,但是獨佔Activity的佈局有多個,當其中一個顯示時,其他的則隱藏,對於一些不太複雜的界面,需要切換界面時,我建議採用這種方式來處理,如下圖所示:


圖中所爲的Activity1和Activity2其實是同一個Activity,這麼寫只是爲了指代兩個界面,界面1顯示的時候,界面2是隱藏的,當我們在界面1上的操作處理完之後,需要轉換界面繼續,通過觸發事件,執行一個翻轉動畫,將界面1隱藏,界面2顯示,看起來就像由界面1跳轉到了界面2一樣,實際上這並不是跳轉,只是佈局的顯示和隱藏而已。


使用這種方式來處理界面轉換時,不需要進行參數傳遞,因爲本來就在同一個界面,不需要啓動多餘的Activity,創建Fragment,方便之處是顯而易見的。當然,這種方法也有很大的侷限性,如果界面過於複雜,Activity本來就執行了太多的操作,此時加載更多的佈局和事件可能會影響到系統的運行。

推薦使用環境:當界面內容不多,佈局相對簡單,但某些功能性的需要要求界面必須轉換的時候,這種方式就非常好用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章