<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                這篇文章主要介紹fragment的生命周期而不是用法。 由于fragment不是獨立的組件,需要被添加到Acitvity中,所以Fragment的生命周期和Activity存在一定的關聯 和fragment生命周期有關的的幾個重要回調方法: onAttach(Activity) ?fragment被添加到activity時被調用 onCreate(Bundle) ?fragment創建時調用 onCreateView(LayoutInflater, ViewGroup, Bundle) ?fragment初始化界面時調用 onActivityCreated(Bundle) 包含fragment的activity的onCreate方法執行完畢后調用 onStart()?fragment可見時,和activitiy的onStart相關聯 onResume() ?和activitiy的onResume相關聯 onPause() ?activity?onPause或者fragment被移除時 onStop() ?activity?onStop或者fragment被移除時 onDestroyView()?fragment被移除時,關聯的view正在被移除時調用 onDestroy(),onDetach() fragment被移除時調用 API GUIDE給出的圖示: ![](https://box.kancloud.cn/2016-02-19_56c6aa37611e9.jpg) 還有1個示意圖對比了activity和fragment的生命周期 ![](https://box.kancloud.cn/2016-03-01_56d551f0cd6a3.jpg) 可以看出,fragment的onAttatch,onCreate,onCreateView,onActivityCreated是fragment的創建階段,相當于Activity的創建階段,onStart,onResume,onPause,onStop的流程都和Activity一樣,銷毀階段,包含了onDestroyView,onDestroy,onDetach方法。 下面用例子來演示fragment的生命周期: 初次啟動的Activity: MainActivity.java ~~~ public class MainActivity extends Activity { private Button goFragment; private Button goActivity; private boolean first = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v("test", "Activity-onCreate"); initViews(); } @Override protected void onResume() { super.onResume(); Log.v("test", "Activity-onResume"); } @Override protected void onPause() { super.onPause(); Log.v("test", "Activity-onPause"); } @Override protected void onStop() { super.onStop(); Log.v("test", "Activity-onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.v("test", "Activity-onDestroy"); } private void initViews() { goFragment = (Button) findViewById(R.id.go_fragment); goActivity = (Button) findViewById(R.id.go_activity); goFragment.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.container, new FragmentB()); ft.commit(); } }); goActivity.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Activity2.class)); } }); } @Override protected void onStart() { Log.v("test", "Activity-onStart"); super.onStart(); //防止重復加載fragment if(first) { first = false; FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.container, new FragmentA()); ft.commit(); } } } ~~~ 布局文件: ~~~ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" tools:context=".MainActivity" > <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="350dp" /> <Button android:id="@+id/go_fragment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="go fragment2" /> <Button android:id="@+id/go_activity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="go Activity2" /> </LinearLayout> ~~~ 界面上一個frameLayout,用來裝載fragment,2個按鈕,一個用來替換fragment,一個用來跳轉activity FragmentA的代碼: ~~~ public class FragmentA extends Fragment { @Override public void onAttach(Activity activity) { super.onAttach(activity); Log.v("test", "FragmentA:" + "onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v("test", "FragmentA:" + "onCreate"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.v("test", "FragmentA:" + "onCreateView"); return inflater.inflate(R.layout.fragment1, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.v("test", "FragmentA:" + "onActivityCreated"); } @Override public void onStart() { super.onStart(); Log.v("test", "FragmentA:" + "onStart"); } @Override public void onResume() { super.onResume(); Log.v("test", "FragmentA:" + "onResume"); } @Override public void onPause() { super.onPause(); Log.v("test", "FragmentA:" + "onPause"); } @Override public void onStop() { super.onStop(); Log.v("test", "FragmentA:" + "onStop"); } @Override public void onDestroyView() { super.onDestroyView(); Log.v("test", "FragmentA:" + "onDestroyView"); } @Override public void onDestroy() { super.onDestroy(); Log.v("test", "FragmentA:" + "onDestroy"); } @Override public void onDetach() { super.onDetach(); Log.v("test", "FragmentA:" + "onDetach"); } } ~~~ Activity和fragment的回調中都進行了日志打印。 在Acitivity的onStart方法中,調用了如下代碼: ~~~ FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.container, new FragmentA()); ft.commit(); ~~~ 作用是在Acitivity啟動后在界面上加載一個fragment。 啟動程序,觀察控制臺輸出: ~~~ 10-27 18:20:23.423: V/test(3128): Activity-onCreate 10-27 18:20:23.423: V/test(3128): Activity-onStart 10-27 18:20:23.423: V/test(3128): FragmentA:onAttach 10-27 18:20:23.423: V/test(3128): FragmentA:onCreate 10-27 18:20:23.423: V/test(3128): FragmentA:onCreateView 10-27 18:20:23.423: V/test(3128): FragmentA:onActivityCreated 10-27 18:20:23.423: V/test(3128): FragmentA:onStart 10-27 18:20:23.423: V/test(3128): Activity-onResume 10-27 18:20:23.423: V/test(3128): FragmentA:onResume ~~~ 解釋:MainActivity onCreate執行后,接著執行onStart,onStart中添加了fragment到framelayout中,這時fragment的onAttach回調被調用。接著是onCreate,onCreateView,onActivityCreated依次被回調,現在點擊gofragment2按鈕,移除fragment1,加入fragment2,觀察logcat: ~~~ 10-27 18:44:23.513: V/test(3128): FragmentA:onPause 10-27 18:44:23.513: V/test(3128): FragmentA:onStop 10-27 18:44:23.513: V/test(3128): FragmentA:onDestroyView 10-27 18:44:23.513: V/test(3128): FragmentA:onDestroy 10-27 18:44:23.513: V/test(3128): FragmentA:onDetach ~~~ 正是第一張圖片所示的從前臺到銷毀的過程。 現在重啟程序,試著點擊第二個按鈕go Activity2,觀察logcat輸出: ~~~ 10-27 19:08:34.253: V/test(3128): FragmentA:onPause 10-27 19:08:34.253: V/test(3128): Activity-onPause 10-27 19:08:34.573: V/test(3128): FragmentA:onStop 10-27 19:08:34.573: V/test(3128): Activity-onStop ~~~ 可以看到,當前Activity被覆蓋后,fragment的onPause,onStop和Activity的onPause,onStop同時被調用。 這時,按物理返回鍵,退出第二個Activity,回到第一個Activity,觀察logcat輸出: ~~~ 10-27 19:29:07.063: V/test(9162): Activity-onStart 10-27 19:29:07.063: V/test(9162): FragmentA:onStart 10-27 19:29:07.063: V/test(9162): Activity-onResume 10-27 19:29:07.063: V/test(9162): FragmentA:onResume ~~~ 可見,在activity重新進入前臺,執行onStart和onResume時,fragment也執行一樣的操作 現在修改一下跳轉activity的按鈕的代碼,讓當前activity finish ~~~ goActivity.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Activity2.class)); finish(); } }); ~~~ 重啟程序,點擊跳轉activity的按鈕,觀察輸出: ~~~ 10-27 19:33:54.893: V/test(9810): FragmentA:onPause 10-27 19:33:54.893: V/test(9810): Activity-onPause 10-27 19:33:55.213: V/test(9810): FragmentA:onStop 10-27 19:33:55.213: V/test(9810): Activity-onStop 10-27 19:33:55.213: V/test(9810): FragmentA:onDestroyView 10-27 19:33:55.213: V/test(9810): FragmentA:onDestroy 10-27 19:33:55.213: V/test(9810): FragmentA:onDetach 10-27 19:33:55.213: V/test(9810): Activity-onDestroy ~~~ 原文地址:[http://blog.csdn.net/oHeHeHou/article/details/13168791](http://blog.csdn.net/oHeHeHou/article/details/13168791)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看