close

今天在用 Fragment 時,看到了一個值 RetainInstance

這個參數的預設值是 false

若是改為 true 則會將 Fragment 做保留的動作,如下

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    。。。
}

保留是什麼意思呢?

當 Activity 重建時 (如:螢幕轉向)

Fragment 會 call onDestroyView

但不會call onDestroy 也就是不會毀掉 Fragment

但會調用 onDetach 來與 Activity 分離

 

在 Activity 重建完成後

將會直接 call onAttach、onCreateView...

 

在實作上,有時候我們的 EditText 輸入值

一轉向就消失,雖然設了此參數為 true 依然無效的原因就是 view 被重新 create 了

若不想要 view 被重製,可以將 view 存在 Fragment 上的變數即可,如下 

View view ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (view == null) view= inflater.inflate(。。。
}

由於 Fragment 沒有摧毀,故 View 將不會是 null

 

另外,有人會在取 Context 時報 Nullpointerexception

是因為 Fragment 這時和 Activity  分離了 ( call onDetach )

所以在 getContext() 之前先用 isAdded 來確認是否有綁定 Activity,會比較安全。

 

 

 

 

 

 

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(0) 人氣()