1. 程式人生 > >Fragment生命週期(在不同的方法分別能做什麼操作)

Fragment生命週期(在不同的方法分別能做什麼操作)

在使用fragment時首先要知道fragment的生命週期,我們能在生命週期方法中做什麼操作

onAttchActivity activity):這個方法是在fragmentactivity關聯之後呼叫,我們能在這個方法中獲取這個關聯的activity的例項。但是當你的sdk更新到android6.0api-23)是就會顯示這個方法是過時的,使用onAttachContext  context)這個方法代替,但在看fragment的生命週期時,這個方法好像不呼叫,所以你獲取的Contextnull

onCreate:這個方法是在fragment初始化的時候呼叫,我們通常在這個方法中使用

getArgument獲取activity傳來的初始化fragment的引數。

  注意:在 這個方法中我們不能獲取activity中的控制元件,下面的這段程式碼是在fragment的onCreate中的,你發現activity不是空,但是text是null。因為,這是activityonCreate還沒有執行完,即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:這個方法是在activityonCreate方法執行完執行這個方法,通知fragment,關聯的activityonCreate方法執行完了,即activity建立完了,可以在這個方法中獲取activity中的資源。例如下面,可以獲取activity佈局中的TextView控制元件

@Override
public void onActivityCreated(Bundle savedInstanceState) {
	super.onActivityCreated(savedInstanceState);
	TextView text=getActivity().findViewById(R.id.textview);//獲取activity佈局中的TextView控制元件
}


onStart這個是在activityonstart執行完立即執行,這個方法執行完fragment介面就顯示出來了,但是現在還沒有獲取焦點,使用者是不能操作。

onResume這個方法是在activityonResume方法執行完立即執行,此時fragment的獲取了介面,使用者可以操作。

onPause:fragment失去焦點,此時使用者是不能操作的,執行完立即執行activityonPause方法。

onStop:fragment不可見,執行完立即執行activityonStop方法。

onDestroyView:onCreateView中建立的fragment檢視會被銷燬。Fragment的檢視被回收。

onDestroy當這個fragment不再使用時呼叫。需要注意的是,它即使經過了onDestroy()階段,但仍然能從Activity中找到,因為它還沒有Detach

onDetach:fragmentactivity解除關聯,fragment的所有的資源都被回收。