国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

實例講解Android應用開發中Fragment生命周期的控制

2020-04-11 10:44:35
字體:
來源:轉載
供稿:網友

一、Fragment的生命周期初探

因為Fragment必須嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相關的。

如果Activity是暫停狀態,其中所有的Fragment都是暫停狀態;如果Activity是stopped狀態,這個Activity中所有的Fragment都不能被啟動;如果Activity被銷毀,那么它其中的所有Fragment都會被銷毀。

但是,當Activity在活動狀態,可以獨立控制Fragment的狀態,比如加上或者移除Fragment。

當這樣進行fragment transaction(轉換)的時候,可以把fragment放入Activity的back stack中,這樣用戶就可以進行返回操作。

使用Fragment時,需要繼承Fragment或者Fragment的子類(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代碼看起來和Activity的類似。

每當創建一個Fragment時,首先添加以下三個回調方法:

onCreate():系統在創建Fragment的時候調用這個方法,這里應該初始化相關的組件,一些即便是被暫停或者被停止時依然需要保留的東西。
onCreateView():當第一次繪制Fragment的UI時系統調用這個方法,該方法將返回一個View,如果Fragment不提供 UI也可以返回null。注意,如果繼承自ListFragment,onCreateView()默認的實現會返回一個ListView,所以不用自己 實現。
onPause():當用戶離開Fragment時第一個調用這個方法,需要提交一些變化,因為用戶很可能不再返回來。
將Fragment加載到Activity當中有兩種方式:

方式一:添加Fragment到Activity的布局文件當中
方式二:在Activity的代碼中動態添加Fragment(薦)
第一種方式雖然簡單但靈活性不夠。添加Fragment到Activity的布局文件當中,就等同于將Fragment及其視圖與activity的視圖綁定在一起,且在activity的生命周期過程中,無法切換fragment視圖。

第二種方式比較復雜,但也是唯一一種可以在運行時控制fragment的方式(加載、移除、替換)。

二、生命周期控制實例

package com.goso.testapp;import android.app.Activity;import android.app.ListFragment;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;/** * Demonstration of using ListFragment to show a list of items * from a canned array. */public class FragmentListArray extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    Log.e("HJJ", "Activity &&&& onCreate...");    // Create the list fragment and add it as our sole content.    if (getFragmentManager().findFragmentById(android.R.id.content) == null) {      ArrayListFragment list = new ArrayListFragment();      getFragmentManager().beginTransaction().add(android.R.id.content, list).commit();    }  }  @Override  protected void onStart() {   // TODO Auto-generated method stub   super.onStart();   Log.e("HJJ", "Activity &&&& onStart...");  }    @Override  protected void onResume() {   // TODO Auto-generated method stub   super.onResume();   Log.e("HJJ", "Activity &&&& onResume...");  }    @Override  protected void onStop() {   // TODO Auto-generated method stub   super.onStop();   Log.e("HJJ", "Activity &&&& onStop...");  }    @Override  protected void onPause() {   // TODO Auto-generated method stub   super.onPause();   Log.e("HJJ", "Activity &&&& onPause...");  }    @Override  protected void onDestroy() {   // TODO Auto-generated method stub   super.onDestroy();   Log.e("HJJ", "Activity &&&& onDestroy...");  }    public static class ArrayListFragment extends ListFragment {   @Override   public void onAttach(Activity activity) {   // TODO Auto-generated method stub   Log.e("HJJ", "ArrayListFragment **** onAttach...");   super.onAttach(activity);   }      @Override   public void onCreate(Bundle savedInstanceState) {   // TODO Auto-generated method stub   Log.e("HJJ", "ArrayListFragment **** onCreate...");   super.onCreate(savedInstanceState);   }      @Override   public View onCreateView(LayoutInflater inflater, ViewGroup container,    Bundle savedInstanceState) {   // TODO Auto-generated method stub   Log.e("HJJ", "ArrayListFragment **** onCreateView...");   return super.onCreateView(inflater, container, savedInstanceState);   }       @Override    public void onActivityCreated(Bundle savedInstanceState) {      super.onActivityCreated(savedInstanceState);      Log.e("HJJ", "ArrayListFragment **** onActivityCreated...");      String[] array = new String[]{"C++", "JAVA", "PYTHON"};      setListAdapter(new ArrayAdapter<String>(getActivity(),          android.R.layout.simple_list_item_1, array));    }    @Override    public void onStart() {     // TODO Auto-generated method stub     Log.e("HJJ", "ArrayListFragment **** onStart...");     super.onStart();    }        @Override    public void onResume() {     Log.e("HJJ", "ArrayListFragment **** onResume...");     // TODO Auto-generated method stub     super.onResume();    }        @Override    public void onPause() {     Log.e("HJJ", "ArrayListFragment **** onPause...");     // TODO Auto-generated method stub     super.onPause();    }        @Override    public void onStop() {     Log.e("HJJ", "ArrayListFragment **** onStop...");     // TODO Auto-generated method stub     super.onStop();    }        @Override    public void onDestroyView() {     Log.e("HJJ", "ArrayListFragment **** onDestroyView...");     // TODO Auto-generated method stub     super.onDestroyView();    }        @Override    public void onDestroy() {     // TODO Auto-generated method stub     Log.e("HJJ", "ArrayListFragment **** onDestroy...");     super.onDestroy();    }        @Override    public void onDetach() {     Log.e("HJJ", "ArrayListFragment **** onDetach...");     // TODO Auto-generated method stub     super.onDetach();    }        @Override    public void onListItemClick(ListView l, View v, int position, long id) {      Log.i("FragmentList", "Item clicked: " + id);    }  }}

結果:
onCreate過程

01-22 15:30:28.091: E/HJJ(10315): Activity &&&& onCreate...01-22 15:30:28.091: E/HJJ(10315): ArrayListFragment **** onAttach...01-22 15:30:28.091: E/HJJ(10315): ArrayListFragment **** onCreate...01-22 15:30:28.115: E/HJJ(10315): ArrayListFragment **** onCreateView...01-22 15:30:28.123: E/HJJ(10315): ArrayListFragment **** onActivityCreated...

onStart過程

01-22 15:30:28.123: E/HJJ(10315): Activity &&&& onStart...01-22 15:30:28.123: E/HJJ(10315): ArrayListFragment **** onStart...

onResume過程

01-22 15:30:28.123: E/HJJ(10315): Activity &&&& onResume...01-22 15:30:28.123: E/HJJ(10315): ArrayListFragment **** onResume...

onPause過程

01-22 15:31:26.748: E/HJJ(10315): ArrayListFragment **** onPause...01-22 15:31:26.748: E/HJJ(10315): Activity &&&& onPause...

onStop過程

01-22 15:31:27.638: E/HJJ(10315): ArrayListFragment **** onStop...01-22 15:31:27.638: E/HJJ(10315): Activity &&&& onStop...

onStart過程

01-22 15:31:57.537: E/HJJ(10315): Activity &&&& onStart...01-22 15:31:57.537: E/HJJ(10315): ArrayListFragment **** onStart...

onResume過程

01-22 15:31:57.537: E/HJJ(10315): Activity &&&& onResume...01-22 15:31:57.537: E/HJJ(10315): ArrayListFragment **** onResume...

onPause過程

01-22 15:32:47.412: E/HJJ(10315): ArrayListFragment **** onPause...01-22 15:32:47.412: E/HJJ(10315): Activity &&&& onPause...

onStop過程

01-22 15:32:47.865: E/HJJ(10315): ArrayListFragment **** onStop...01-22 15:32:47.865: E/HJJ(10315): Activity &&&& onStop...

onDestroy過程

01-22 15:32:47.865: E/HJJ(10315): ArrayListFragment **** onDestroyView...01-22 15:32:47.865: E/HJJ(10315): ArrayListFragment **** onDestroy...01-22 15:32:47.865: E/HJJ(10315): ArrayListFragment **** onDetach...01-22 15:32:47.865: E/HJJ(10315): Activity &&&& onDestroy...

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沂源县| 乌兰浩特市| 郧西县| 丰城市| 乡城县| 邵东县| 陕西省| 千阳县| 砀山县| 炎陵县| 建水县| 新巴尔虎右旗| 航空| 荔波县| 九龙城区| 桐庐县| 浏阳市| 新乐市| 中超| 两当县| 安远县| 廊坊市| 花莲县| 双桥区| 东乌珠穆沁旗| 五河县| 防城港市| 商丘市| 曲靖市| 木兰县| 保康县| 阳朔县| 贡嘎县| 潼关县| 西昌市| 夏津县| 普兰店市| 阿拉尔市| 岳阳市| 资源县| 郴州市|