? ? ? ?CrimeFragment類(lèi)是與模型及視圖對(duì)象交互的控制器,用于顯示特定crime的明細(xì)信息,并在用戶(hù)修改這些信息后立即進(jìn)行更新。
? ? ? ?在GeoQuiz應(yīng)用中,activity通過(guò)其生命周期方法完成了大部分邏輯控制工作。而在CriminalIntent應(yīng)用中,這些工作是由fragment的生命周期方法完成的。fragment的許多生命周期方法對(duì)應(yīng)著我們熟知的Activity方法,如onCreate(Bundle)方法。
? ? ? ?在CrimeFragment.java中,新增一個(gè)Crime實(shí)例成員變量,實(shí)現(xiàn)Fragment.onCreate(Bundle)方法,如下代碼所示。
? ? ? ?覆蓋Fragment.onCreate(Bundle)方法(CrimeFragment.java)
? ? ? ?public class CrimeFragment extends Fragment {
? ? ? ?private Crime mCrime;
? ? ? ?@Override
? ? ? ?public void onCreate(Bundle savedInstanceState) {
? ? ? ?super.onCreate(savedInstanceState);
? ? ? ?mCrime = new Crime();
? ? ? ?}
? ? ? ?}?
? ? ? ?在這里,南昌APP開(kāi)發(fā)公司要告訴大家的是需注意以上實(shí)現(xiàn)代碼中的以下幾點(diǎn):
? ? ? ?首先,F(xiàn)ragment.onCreate(Bundle)是公共方法,而Activity.onCreate(Bundle)是保護(hù)方法。Fragment.onCreate(...)方法及其他Fragment生命周期方法必須是公共方法,因?yàn)橥泄躥ragment的activity要調(diào)用它們。
? ? ? ?其次,類(lèi)似于activity,fragment同樣具有保存及獲取狀態(tài)的bundle。如同使用Activity.onSaveInstanceState(Bundle)方法那樣,我們也可以根據(jù)需要覆蓋Fragment.onSaveInstanceState(Bundle)方法。
? ? ? ?另外,fragment的視圖并沒(méi) 有在Fragment.onCreate(...)方法中生成。雖然我們?cè)?/span>Fragment.onCreate(...)方法中配置了fragment實(shí)例,但創(chuàng)建和配置fragment視圖是另一個(gè)fragment生命周期方法完成的:
? ? ? ?public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
? ? ? ?該方法實(shí)例化fragment 視圖的布局,然后將實(shí)例化的 View 返回給托管 activity 。
? ? ? ? LayoutInflater及ViewGroup是實(shí)例化布局的必要參數(shù)。Bundle用來(lái)存儲(chǔ)恢復(fù)數(shù)據(jù),可供該方法從保存狀態(tài)下重建視圖。
? ? ? ?在CrimeFragment.java中,添加onCreateView(...)方法的實(shí)現(xiàn)代碼,從fragment_crime.xml布局中實(shí)例化并返回視圖,如下代碼所示。
? ? ? ?覆蓋onCreateView(...)方法(CrimeFragment.java)
? ? ? ?public class CrimeFragment extends Fragment {
? ? ? ?private Crime mCrime;?
? ? ? ?@Override
? ? ? ?public void onCreate(Bundle savedInstanceState) {
? ? ? ?super.onCreate(savedInstanceState);
? ? ? ?mCrime = new Crime();
? ? ? ?}
? ? ? ?@Override
? ? ? ?public View onCreateView(LayoutInflater inflater, ViewGroup container,
? ? ? ?Bundle savedInstanceState) {
? ? ? ?View v = inflater.inflate(R.layout.fragment_crime, container, false);
? ? ? ?return v;
? ? ? ?}
? ? ? ?}?
? ? ? ?在 onCreateView(...) 方法中, fragment 的視圖是直接通過(guò)調(diào)用 LayoutInflater.inflate(...)方法并傳入布局的資源ID生成的。第二個(gè)參數(shù)是視圖的父視圖,我們通常需要父視圖來(lái)正確配置組件。第三個(gè)參數(shù)告知布局生成器是否將生成的視圖添加給父視圖。這里,我們傳入了false參數(shù),因?yàn)槲覀儗⒁詀ctivity代碼的方式添加視圖。
? ? ? ?以上就是百恒網(wǎng)絡(luò)為大家介紹的關(guān)于實(shí)現(xiàn)fragment生命周期的方法,希望能夠幫到大家!