您的位置:首页 > 其它

<Fragment>的生命周期

2016-06-23 07:55 363 查看
坚持住你的坚持,成功就在拐弯处。

/**
* 生命周期的代码
*/
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 的生命周期中,如下方法被系统回调.

onAttach(Activity) 当Fragment被添加到 Activity时,被回调.该方法只会被调用一次.

onCreate(Bundle) 创建Fragment 时被回调,该方法只会被调用一次.

onCreateView(LayoutInflater, ViewGroup, Bundle) ;每次创建,绘制Fragment的View组件时回调该方法,Fragment将会显示该方法返回的view组件.

onActivityCreated(Bundle) 当Fragment所在的Activity 被启动完成后回调该方法.

onStart() 启动Fragment 时被回调.

onResume() 恢复Fragment时被回调, onStart()方法后一定会回调 onResume()方法.

onPause() 暂停时Fragment时被回调.

onStop(); 停止Fragment 时被回调.

onDestroyView() 销毁 该Fragment 所包含的View 组件时调用.

onDestroy() 销毁 Fragment时被回调. 该方法只会调用一次.

onDetach() 将该 fragment 从Activity中 被删除,被替换完成时,回调该方法. onDestroy方法后一定会回调 onDetach()方法.该方法只会调用一次.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Fragment