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,會比較安全。
文章標籤
全站熱搜
留言列表