<Fragment>的生命周期

来源:互联网 发布:中国联通无线上网 mac 编辑:程序博客网 时间:2024/06/07 05:33

坚持住你的坚持,成功就在拐弯处。

/** * 生命周期的代码 */public class LifecycleFragment extends Fragment {    public static final String TAG = "LifecycleFragment";    @Override    public void onAttach(Context context) {        super.onAttach(context);        Log.d(TAG, "--onAttach--");    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.d(TAG, "--onCreate--");    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        Log.d(TAG, "--onCreateView--");        TextView tv = new TextView(getActivity());        tv.setText("测试 fragment");        tv.setGravity(Gravity.CENTER);        tv.setTextSize(36);        return tv;    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Log.d(TAG, "--onActivityCreated--");    }    @Override    public void onStart() {        super.onStart();        Log.d(TAG, "--onStart--");    }    @Override    public void onResume() {        super.onResume();        Log.d(TAG, "--onResume--");    }    @Override    public void onPause() {        super.onPause();        Log.d(TAG, "--onPause--");    }    @Override    public void onStop() {        super.onStop();        Log.d(TAG, "--onStop--");    }    @Override    public void onDestroyView() {        super.onDestroyView();        Log.d(TAG, "--onDestroyView--");    }    @Override    public void onDestroy() {        super.onDestroy();        Log.d(TAG, "--onDestroy--");    }    @Override    public void onDetach() {        super.onDetach();        Log.d(TAG, "--onDetach--");    }    public LifecycleFragment() {    }}

package com.test.lifecyclefragment.activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import com.test.lifecyclefragment.R;import com.test.lifecyclefragment.fragment.LifecycleFragment;import com.test.lifecyclefragment.fragment.SeconFragment;/** * Fragment的生命周期 * */public class MainActivity extends AppCompatActivity {    Button startActivity,addFragment,backFragment,replaceFragment,finish;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView(); //初始化控件        initListener(); //初始化监听事件    }    private void initListener() {        startActivity.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //启动对话框风格Activity                startActivity(new Intent(MainActivity.this,SecondActivity.class));            }        });        //添加 Fragment        addFragment.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                LifecycleFragment fragment = new LifecycleFragment();                getFragmentManager().beginTransaction().replace(R.id.container,fragment).commit();            }        });        //将替换前的Fragment 添加到 Back栈中        backFragment.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SeconFragment secFragment = new SeconFragment();                getFragmentManager().beginTransaction()                        .replace(R.id.container, secFragment)                        .addToBackStack("aa")// 将替换前的Fragment添加到Back栈                        .commit();            }        });        //替换 Fragment        replaceFragment.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SeconFragment secFragment = new SeconFragment();                getFragmentManager().beginTransaction().replace(R.id.container, secFragment).commit();            }        });        // 为finish按钮绑定事件监听器        finish.setOnClickListener(new View.OnClickListener()        {            @Override            public void onClick(View source)            {                // 结束该Activity                MainActivity.this.finish();            }        });    }    private void initView() {        startActivity = (Button) findViewById(R.id.start_dialog_activity);        addFragment = (Button) findViewById(R.id.addFragment);        backFragment = (Button) findViewById(R.id.backFragment);        replaceFragment = (Button) findViewById(R.id.replaceFragment);        finish = (Button) findViewById(R.id.finish);    }}

/** * 对话框风格 Activity */public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView tv = new TextView(getApplication());        tv.setText("对话框风格Activity");        setContentView(tv);    }}

public class SeconFragment extends Fragment{    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        TextView tv = new TextView(getActivity());        tv.setText("第二个 Fragment");        tv.setGravity(Gravity.CENTER_HORIZONTAL);        tv.setTextSize(36);        tv.setTextColor(Color.BLUE);        return  tv;    }}

点击 加载目标Fragment 按钮时会执行 –onAttach–,–onCreate–, –onCreateView–,–onActivityCreated–,–onStart–,-onResume–方法.
接着点击 启动对话框Activity的按钮 当前的Activity会进入暂停状态,该 Fragment也会进入暂停状态,会执行 –onPause–方法. 点击返回键,关闭对话框Activity. Fragment会执行onResume()方法.

继续点击 替换目标Fragment,并加入Back栈中 的按钮
–onPause– –onStop– –onDestroyView–方法.

点击 替换目标Fragment 按钮之后 执行 –onPause–, –onStop–,–onDestroyView–, –onDestroy–,–onDetach– 该Fragment 将会被完全结束,Fragment将进入”销毁”状态.


Fragment 的生命周期中,如下方法被系统回调.

  1. onAttach(Activity) 当Fragment被添加到 Activity时,被回调.该方法只会被调用一次.
  2. onCreate(Bundle) 创建Fragment 时被回调,该方法只会被调用一次.
  3. onCreateView(LayoutInflater, ViewGroup, Bundle) ;每次创建,绘制Fragment的View组件时回调该方法,Fragment将会显示该方法返回的view组件.
  4. onActivityCreated(Bundle) 当Fragment所在的Activity 被启动完成后回调该方法.
  5. onStart() 启动Fragment 时被回调.
  6. onResume() 恢复Fragment时被回调, onStart()方法后一定会回调 onResume()方法.
  7. onPause() 暂停时Fragment时被回调.
  8. onStop(); 停止Fragment 时被回调.
  9. onDestroyView() 销毁 该Fragment 所包含的View 组件时调用.
  10. onDestroy() 销毁 Fragment时被回调. 该方法只会调用一次.
  11. onDetach() 将该 fragment 从Activity中 被删除,被替换完成时,回调该方法. onDestroy方法后一定会回调 onDetach()方法.该方法只会调用一次.
0 0
原创粉丝点击