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