使用newInstance()來例項化fragment
這種設計是一種靜態工廠方法,讓我們在初始化和設定一個新的fragment的時候省去呼叫它的建構函式和額外的setter方法。為你的Fragment提供靜態工廠方法是一種好的做法,因為它封裝和抽象了在客戶端構造物件所需的步驟。
我們直接為它們提供一個靜態工廠方法。這樣做比呼叫預設構造方法好,有兩個原因:一個是,它方便別人的呼叫。另一個是,保證了fragment的構建過程不會出錯。通過提供一個靜態工廠方法,我們避免了自己犯錯–我們再也不用擔心不小心忘記初始化fragmnet的引數或者沒正確設定引數。
還有很重要的一點就是:fragmnet經常會被銷燬重新例項化,Android framework只會呼叫fragment無參的建構函式。在系統自動例項化fragment的過程中,你沒有辦法干預。一些需要外部傳入的引數來決定的初始化就沒有辦法完成。使用靜態工廠方法,將外部傳入的引數可以通過Fragment.setArgument儲存在它自己身上,這樣我們可以在Fragment.onCreate(…)呼叫的時候將這些引數取出來。
/** * Created by 謝棟 on 2016/12/3. */ public class FragmentLayout extends Fragment { //構造方法 public FragmentLayout() { } /** * 靜態工廠方法需要一個String型的值來初更新fragment中的內容, * 然後返回新的fragment到呼叫者 */ public static FragmentLayout newInstance(String text) { Bundle args = new Bundle(); args.putString("text",text); FragmentLayout fragment = new FragmentLayout(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_layout,null); } //onViewCreate()方法會在onCreateView()方法執行完之後立即執行,而onCreateView返回的就是Fragment要顯示的View @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); TextView pagerText = (TextView) view.findViewById(R.id.pager_text); String string = getArguments().getString("text"); pagerText.setText(string); } }
相關推薦
使用newInstance()來例項化fragment
這種設計是一種靜態工廠方法,讓我們在初始化和設定一個新的fragment的時候省去呼叫它的建構函式和額外的setter方法。為你的Fragment提供靜態工廠方法是一種好的做法,因為它封裝和抽象了在客戶端構造物件所需的步驟。 我們直接為它們提供一個靜態工廠方法。這樣做比
使用newInstance()來例項化fragment 並傳遞資料
好問題。答案就是這篇文章的題目所建議的,這是一種合理的設計。在這種情況下,newInstance()方法是一種“靜態工廠方法",讓我們在初始化和設定一個新的fragment的時候省去呼叫它的建構函式和額外的setter方法。為你的Fragment提供靜態工廠方法是一種好的做
Android 從原始碼的角度分析——為什麼要用newInstance來例項化Fragment
最近在看Google技術文件的時候發現了一種新的方式來例項化Fragment,就是採用靜態工廠的方式建立Fragment。我們在使用Android studio建立一個類的時候,選擇New ->Fragment->Fragment(Blank)可以很
Android中利用newInstance()方法例項化fragment
Android是在Android 3.0 (API level 11)開始引入Fragment的。Fragment可以使你能夠將activity分離成多個可重用的元件,每個都有它自己的生命週期和UI。那我們應該怎麼去建立fragment呢?Google已經考慮到
Android使用newInstance()例項化fragment&setArguments()傳遞引數
new MyFragment()和MyFragment.newInstance()之間的差別是什麼?應該用哪個呢? newInstance()方法是一種“靜態工廠方法”,讓我們在初始化和設定一個新的fragment的時候省去呼叫它的建構函式和額外的
JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項化物件)
newInstance()是實現IOC、反射、面對介面程式設計 和 依賴倒置 等技術方法的必然選擇,new 只能實現具體類的例項化,不適合於介面程式設計。 裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權
Effective Java 第三版讀書筆記——條款4:使用私有構造器來強制實現不可例項化
偶爾你會想寫一個類,這個類只是一組靜態方法和靜態屬性。 這樣的類獲得了不好的名聲,因為有些人濫用這些類而避免以面向物件的方式思考,但是它們有時候確實有實際的用處: 它們可以被用來聚集一組建立在基礎型別或陣列之上的相關方法,例如 java.lang.Math 或 java.util
讓多個Fragment 切換時不重新例項化
在專案中需要進行Fragment的切換,一直都是用replace()方法來替換Fragment: 1 2 3 4 5 6 7 8 9 public void s
Effective Java 第三版讀書筆記——條款3:使用私有構造器來強制實現不可例項化
偶爾你會想寫一個類,這個類只是一組靜態方法和靜態屬性。 這樣的類獲得了不好的名聲,因為有些人濫用這些類而避免以面向物件的方式思考,但是它們有時候確實有實際的用處: 它們可以被用來聚集一組建立在基礎型別或陣列之上的相關方法,例如 java.lang.Math
Fragment例項化,Fragment生命週期原始碼分析
Fragment的例項化,Fragment的生命週期 android.support.v4.app.FragmentActivity#onCreate @Override protected void onCreate(Bundle savedI
Android 讓多個Fragment 切換時不重新例項化
原文: http://www.yrom.net/blog/2013/03/10/fragment-switch-not-restart/# 在專案中需要進行Fragment的切換,一直都是用replace()方法來替換Fragment: public void switc
Android碎片化Fragment例項一
一:內容概覽 我們再android中所說的碎片化也就是針對不同裝置的螢幕大小設計不同的適配方案所說的詞語。一般而言我們就是在開發時針對不同螢幕解析度的裝置適配UI,比如手機和平板。在本小節,我
防止fragment反覆例項化
fragment很多優勢,但也很多坑。 公司的專案切換fragment時都使用了replace(),我想這樣會不會讓fragment反覆地例項化呢?能不能優化呢?於是開始了探索。 分析可能有點亂,先直接上結論:使用add()/show()可避免反覆例項化
如果類的建構函式私有化,再例項化時,通過靜態成員函式來呼叫建構函式。
靜態私有成員在類外不能被訪問,可通過類的靜態成員函式來訪問; 當類的建構函式是私有的時,不像普通類那樣例項化自己,只能通過靜態成員函式來呼叫建構函式。 物件之間通過類的靜態成員變數來實現資料的共享的。
關於切換Fragment的不重新例項化的解決方法
我一般用的replace()方法去切換Fragment,當你只寫靜態頁面的時候是看不出什麼區別的,可當你和伺服器互動時你就會發現,即便是已經顯示過的Fragment還是會被重新例項化,因為replace是會先remove然後add的,所以每次都會執行onDestroyVie
fragment不重新例項化
關於Fragment 在這簡單說一下Fragment,Fragment是Android 3.0以後才出現的,是為了適應不同的手機螢幕、平板和電視機的螢幕的。另外還有一個重要的原因,因為Activity的建立到銷燬需要費時費記憶體,大量的Activity之間的跳轉會造成堆疊飽
使用Json.NET來序列化所需的數據
toolbar src 關鍵字 boolean 自定義 ember api log mar 我們在做開發的時候,很多時候需要和Json數據格式打交道,如Web開發裏面,很多時候,數據通過Json進行傳遞到頁面上,然後在進行處理的。而使用Json的時候,我們很多時候會涉及到幾
構造函數、初始化列表來初始化字段、析構函數、拷貝構造函數
eve 字段 pub ble setlength div 另一個 類型 src #include <iostream> using namespace std; class Line { public: int g
Spring的核心api和兩種例項化方式
一.spring的核心api Spring有如下的核心api BeanFactory :這是一個工廠,用於生成任意bean。採取延遲載入,第一次getBean時才會初始化Bean ApplicationContext:是BeanFactory的子介面,功能更強大。(國際化處理、事件傳遞、Bean自動
String類(物件例項化、字串比較、物件池、字串常量不可變更)
String的兩種例項化方式 直接賦值和傳統例項化: public class Stringob { public static void main(String[] args) { String str1="hello"; //直接賦值 str是一個物