天天看點

【譯】使用newInstance()來執行個體化fragment

我最近讀到StackOverflow上面關于Fragment執行個體化的一個問題,覺得挺有趣的。

new MyFragment()和MyFragment.newInstance()之間的差别是什麼?應該用哪個呢?

好問題。答案就是這篇文章的題目所建議的,這是一種合理的設計。在這種情況下,newInstance()方法是一種“靜态工廠方法",讓我們在初始化和設定一個新的fragment的時候省去調用它的構造函數和額外的setter方法。為你的Fragment提供靜态工廠方法是一種好的做法,因為它封裝和抽象了在用戶端構造對象所需的步驟。例如,考慮下面的代碼:

【譯】使用newInstance()來執行個體化fragment
【譯】使用newInstance()來執行個體化fragment

    不要讓用戶端去調用預設的構造函數,然後手動地設定fragment的參數。我們直接為它們提供一個靜态工廠方法。這樣做比調用預設構造方法好,有兩個原因:一個是,它友善别人的調用。另一個是,保證了fragment的建構過程不會出錯。通過提供一個靜态工廠方法,我們避免了自己犯錯--我們再也不用擔心不小心忘記初始化fragmnet的參數或者沒正确設定參數。

    總的來說,雖然兩者的差別隻在于設計,但是他們之間的差别非常大。因為提供靜态工廠方法有向上抽象了一個級别,讓代碼更容易懂。

    譯者注:其實提供靜态工廠而不是使用預設構造函數或者自己定義一個有參的構造函數還有至關重要一點。fragmnet經常會被銷毀重新執行個體化,Android framework隻會調用fragment無參的構造函數。在系統自動執行個體化fragment的過程中,你沒有辦法幹預。一些需要外部傳入的參數來決定的初始化就沒有辦法完成。使用靜态工廠方法,将外部傳入的參數可以通過Fragment.setArgument儲存在它自己身上,這樣我們可以在Fragment.onCreate(...)調用的時候将這些參數取出來。

<a href="http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html" target="_blank">原文連結:Using newInstance() to Instantiate a Fragment</a>

本文轉自陳哈哈部落格園部落格,原文連結http://www.cnblogs.com/kissazi2/p/4127336.html如需轉載請自行聯系原作者

kissazi2

繼續閱讀