前言
不知道各位會不會有這種想法:不想將重複的程式碼一直加入到程式當中
在寫Android當中,我個人認為Fragment是一個很棒的東西,因為它可以將你的App挖出一塊空間出來,來讓你的Fragment Layout來進行切換
但是,在切換的過程當中,往往切換頁面的程式碼都需要進行重複的撰寫。
因此筆者一直在思考,要如何做到只寫一次,就可以持續的做切換
因此就想出了可以直接將切換頁面的程式碼進行封裝
利用靜態方法,讓底下的這串切換程式碼的功能能夠進行覆用
1 | FragmentTransaction transaction = getFragmentManager().beginTransaction(); |
但當你寫完後,你會發現…. Error!!
他會告訴你,你的靜態方法Change當中,包含了非靜態的方法「getFragmentManager()」
那…該怎麼辦?難道就註定無法將程式碼進行重複使用嗎?
在跟高手討論過後,既然山不轉,就路轉
我們一樣宣告成靜態函數,但是這次呢,我們將參數全部由我們的MainActivity來進行傳送
因此在我們封裝的這個類別 FragmentManagerTool 當中
我們寫了這樣的程式碼
1 | public class FragmentManagerTool { |
我們將參數由外面的Activity來進行傳入,如此一來就可以透過static來將我們的切換頁面函數來進行呼叫。
這時候外面只需要這樣撰寫就可以了:
1 | FragmentManagerTool.init(savedInstanceState,getSupportFragmentManager(),R.id.content,ViewList.Instance()); |
這樣的做法是不是很方便呢?
這時候也許你會問:
為什麼會需要有init 這個方法?
不是只需要將頁面進行replace就好了嗎?為什麼在 init() 當中,會用到Add()的方法呢?
原因在於說:
各位有沒有發現到在MainActivity當中的OnCreate()當中,有著這樣的一段Code:
1 | @Override |
各位會發現到,在你的OnCreate當中有一個Bundle類別的參數 savedInstanceState
這是什麼呢?我們查閱了官網的解釋,有興趣的可以點選連結進行查閱:
文件上說明了:「 savedInstanceState Always都會是null,直到在背景執行記憶體回收時,savedInstanceState 會保存你上一次的Activity」
也就是說,在OnCreate當中的參數,主要是為了將你的App在背景執行時,倘若被回收掉記憶體,仍然能保持先前的樣子,包含Fragment
因此,在第一次使用Fragment Add的時候 才會需要這樣判斷,當savedInstanceState為null的時候 才進行Add
把Fragment加入到Activity中 其餘都採用Replace去做更換。
如此一來,不僅記憶體回收時可以保持先前的樣子,而我們所想要達到的目的封裝成類別使用也同時成功了。
有任何家教、案子 或技術相關問題 請都歡迎聯繫我