Fragment生命周期2

来源:互联网 发布:阿里云盒子刷安卓系统 编辑:程序博客网 时间:2024/06/05 04:26
本文主要演绎了多个Fragment堆在一个Activity的管理栈中时,他们的生命周期回调函数如何走。


程序执行的操作分为三步:

第一步:运行程序后,点击第一个按钮;
第二步:接着点击第二个按钮;

第三步:点击返回键。



主界面布局文件activity_main.xml代码:

<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"    tools:context="com.zhi.fragmentlifecycle.Fragment1">    <LinearLayout        android:id="@+id/main_ll_left"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="2"        android:background="#E8E8E8"        android:gravity="center_horizontal"        android:orientation="vertical">        <Button            android:id="@+id/main_btn_button1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="button1" />        <Button            android:id="@+id/main_btn_button2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="button2" />    </LinearLayout>    <LinearLayout        android:id="@+id/main_ll_right"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="5"        android:orientation="horizontal"></LinearLayout></LinearLayout>

主界面MainActivty代码:

package com.zhi.fragmentlifecycle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends Activity implements View.OnClickListener {    private FragmentManager manager;    private FragmentTransaction transaction;    private Button mButton1;    private Button mButton2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButton1 = (Button) this.findViewById(R.id.main_btn_button1);        mButton2 = (Button) this.findViewById(R.id.main_btn_button2);        mButton1.setOnClickListener(this);        mButton2.setOnClickListener(this);    }    @Override    public void onClick(View v) {        manager = getFragmentManager(); //获取管理Fragment的管理器        transaction = manager.beginTransaction(); //开始事务        switch (v.getId()) {            case R.id.main_btn_button1:                Fragment1 fragment1 = new Fragment1();                transaction.replace(R.id.main_ll_right, fragment1);                transaction.addToBackStack(null); //添加到回退栈                break;            case R.id.main_btn_button2:                Fragment2 fragment2 = new Fragment2();                transaction.replace(R.id.main_ll_right, fragment2);                transaction.addToBackStack(null);//添加到回退栈                break;            default:                break;        }        transaction.commit(); //提交事务    }}

Fragment1代码:

package com.zhi.fragmentlifecycle;import android.app.Activity;import android.os.Bundle;import android.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment1 extends Fragment {    private final String TAG = "Fragment1";    /**     * 与Activity关联起来     * @param activity     */    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        Log.i(TAG, "---Fragment1--->onAttach");    }    /**     * 创建本Fragment,一般在此声明变量     * @param savedInstanceState     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.i(TAG, "---Fragment1--->onCreate");    }    /**     * 创建本Fragmen的UI布局,相关控件的操作在此执行     * @param inflater     * @param container     * @param savedInstanceState     * @return     */    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment1 , null);        Log.i(TAG, "---Fragment1--->onCreateView");        return view;    }    /**     * 当关联的Activity的onCreate方法被执行后执行本方法     * @param savedInstanceState     */    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Log.i(TAG, "---Fragment1--->onActivityCreated");    }    /**     * 启动状态     */    @Override    public void onStart() {        super.onStart();        Log.i(TAG, "---Fragment1--->onStart");    }    /**     * 运行状态     */    @Override    public void onResume() {        super.onResume();        Log.i(TAG, "---Fragment1--->onResume");    }    /**     * 暂停状态     */    @Override    public void onPause() {        super.onPause();        Log.i(TAG, "---Fragment1--->onPause");    }    /**     * 停止状态     */    @Override    public void onStop() {        super.onStop();        Log.i(TAG, "---Fragment1--->onStop");    }    /**     * 销毁本Fragment的UI布局     */    @Override    public void onDestroyView() {        super.onDestroyView();        Log.i(TAG, "---Fragment1--->onDestroyView");    }    /**     * 结束Fragment自身     */    @Override    public void onDestroy() {        super.onDestroy();        Log.i(TAG, "---Fragment1--->onDestroy");    }    /**     * 与Activity断开关联     */    @Override    public void onDetach() {        super.onDetach();        Log.i(TAG, "---Fragment1--->onDetach");    }}

Fragment2代码:

package com.zhi.fragmentlifecycle;import android.app.Activity;import android.app.Fragment;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment2 extends Fragment {    private final String TAG = "Fragment2";    /**     * 与Activity关联起来     * @param activity     */    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        Log.i(TAG, "---Fragment2--->onAttach");    }    /**     * 创建本Fragment,一般在此声明变量     * @param savedInstanceState     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.i(TAG, "---Fragment2--->onCreate");    }    /**     * 创建本Fragmen的UI布局,相关控件的操作在此执行     * @param inflater     * @param container     * @param savedInstanceState     * @return     */    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment2 , null);        Log.i(TAG, "---Fragment2--->onCreateView");        return view;    }    /**     * 当关联的Activity的onCreate方法被执行后执行本方法     * @param savedInstanceState     */    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Log.i(TAG, "---Fragment2--->onActivityCreated");    }    /**     * 启动状态     */    @Override    public void onStart() {        super.onStart();        Log.i(TAG, "---Fragment2--->onStart");    }    /**     * 运行状态     */    @Override    public void onResume() {        super.onResume();        Log.i(TAG, "---Fragment2--->onResume");    }    /**     * 暂停状态     */    @Override    public void onPause() {        super.onPause();        Log.i(TAG, "---Fragment2--->onPause");    }    /**     * 停止状态     */    @Override    public void onStop() {        super.onStop();        Log.i(TAG, "---Fragment2--->onStop");    }    /**     * 销毁本Fragment的UI布局     */    @Override    public void onDestroyView() {        super.onDestroyView();        Log.i(TAG, "---Fragment2--->onDestroyView");    }    /**     * 结束Fragment自身     */    @Override    public void onDestroy() {        super.onDestroy();        Log.i(TAG, "---Fragment2--->onDestroy");    }    /**     * 与Activity断开关联     */    @Override    public void onDetach() {        super.onDetach();        Log.i(TAG, "---Fragment2--->onDetach");    }}

fragment1.xml和fragment2.xml都是一个TextView文本的布局,在这里就不贴了。


程序执行后打印的Log信息:

点击第一个按钮
---Fragment1--->onAttach
---Fragment1--->onCreate
---Fragment1--->onCreateView
---Fragment1--->onActivityCreated
---Fragment1--->onStart
---Fragment1--->onResume


点击第二个按钮
---Fragment1--->onPause
---Fragment1--->onStop
---Fragment1--->onDestroyView
---Fragment2--->onAttach
---Fragment2--->onCreate
---Fragment2--->onCreateView
---Fragment2--->onActivityCreated
---Fragment2--->onStart
---Fragment2--->onResume


按返回键
---Fragment2--->onPause
---Fragment2--->onStop
---Fragment2--->onDestroyView
---Fragment2--->onDestroy
---Fragment2--->onDetach
---Fragment1--->onCreateView
---Fragment1--->onActivityCreated
---Fragment1--->onStart
---Fragment1--->onResume


红色部分比较关键,说明当Fragment1被覆盖的时候,他的布局是会被销毁的(执行onDestroyView),然后当它再次重现的时候就重新创建布局(从onCreateView这一步开始执行)。


0 0