Fragment生命週期(在不同的方法分別能做什麼操作)
在使用fragment時首先要知道fragment的生命週期,我們能在生命週期方法中做什麼操作
onAttch(Activity activity):這個方法是在fragment與activity關聯之後呼叫,我們能在這個方法中獲取這個關聯的activity的例項。但是當你的sdk更新到android6.0(api-23)是就會顯示這個方法是過時的,使用onAttach(Context context)這個方法代替,但在看fragment的生命週期時,這個方法好像不呼叫,所以你獲取的Context是null
onCreate:這個方法是在fragment初始化的時候呼叫,我們通常在這個方法中使用
注意:在 這個方法中我們不能獲取activity中的控制元件,下面的這段程式碼是在fragment的onCreate中的,你發現activity不是空,但是text是null。因為,這是activity的onCreate還沒有執行完,即activity還沒有建立完,要想獲取activity相關的資源應該在onActivityCreated中獲取。
MainActivity activity=(MainActivity) getActivity();//activity不是null TextView text=activity.findViewById(R.id.textview);//text是null
onCreateView:這個方法中我們主要是通過佈局填充器獲取fragment佈局。我們在這個方法中通過view.findViewById初始化fragment中的控制元件,
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view=inflater.inflate(R.layout.text_content, null);//獲取佈局 text=(TextView) view.findViewById(R.id.textview);//初始化fragment的控制元件 return view; }
onActivityCreated:這個方法是在activity的onCreate方法執行完執行這個方法,通知fragment,關聯的activity的onCreate方法執行完了,即activity建立完了,可以在這個方法中獲取activity中的資源。例如下面,可以獲取activity佈局中的TextView控制元件
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView text=getActivity().findViewById(R.id.textview);//獲取activity佈局中的TextView控制元件
}
onStart:這個是在activity的onstart執行完立即執行,這個方法執行完fragment介面就顯示出來了,但是現在還沒有獲取焦點,使用者是不能操作。
onResume:這個方法是在activity的onResume方法執行完立即執行,此時fragment的獲取了介面,使用者可以操作。
onPause:fragment失去焦點,此時使用者是不能操作的,執行完立即執行activity的onPause方法。
onStop:fragment不可見,執行完立即執行activity的onStop方法。
onDestroyView:在onCreateView中建立的fragment檢視會被銷燬。Fragment的檢視被回收。
onDestroy:當這個fragment不再使用時呼叫。需要注意的是,它即使經過了onDestroy()階段,但仍然能從Activity中找到,因為它還沒有Detach
onDetach:fragment與activity解除關聯,fragment的所有的資源都被回收。