2016-04-19 62 views
7

這兩種方法的真正區別是什麼?片段newInstance爲什麼使用參數?

1.I現在用標準的老fashined束:

public static final Fragment newInstance(int val1, int val2) { 
    TestFragment f = new TestFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putInt("val1", val1); 
    bundle.putInt("val2", val2); 
    f.setArguments(bundle); 
    return f; 
} 

2.我設置爲實例成員

public static final Fragment newInstance(int val1, int val2) { 
    TestFragment f = new TestFragment(); 
    f.val1 = val1; 
    f.val2 = val2; 
    return f; 
} 

回答

6

在第一個例子,你還沒有真正設置片段實例變量val1和val2,因此它們保持未初始化狀態。因此,您需要回讀onCreate中的包以設置實例變量。

當片段實例銷燬和重新創建的(例如,由於一個設備旋轉),所述的onCreate(或onCreateDialog用於DialogFragments)可使用重新加載的參數:

public void onCreate(Bundle savedInstanceState) 
{ 
if (savedInstanceState != null) 
{ 
    Bundle args = getArguments(); 
    val1 = args.getInt("val1"); 
    val2 = args.getInt("val2"); 
} 
} 

和您的狀態可以恢復。

+0

這很現實,很愚蠢!謝謝! – Heisenberg

3

arguments束被保持在onSaveInstanceState(),而構造參數都沒有。

同樣,如果你沒有你的領域節省出來onSaveInstanceState()在活動中發生了什麼。考慮到像Intent這樣的arguments捆綁包,Intent也會在進程死亡和配置更改中保留。

相關問題