當如果在Activity要使用Fragment的話,就會遇到生命週期的問題
Activity有自己的生命週期,Fragment也有擁有自己的生命週期
所以Fragment就會受到Activity生命週期的限制
做個實驗驗證一下上圖
拿之前做的Actionbar Tab來弄
public class MainActivity extends Activity {
static String Tag = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(Tag, "onCreate()............");
ActionBar actionBar = getActionBar();
// 設置AcitonBar的操作模型
ActionBar.Tab tab1 = actionBar.newTab().setText("Normal");
ActionBar.Tab tab2 = actionBar.newTab().setText("Project");
Fragment Fragment1Name = new Calculator1Fragment() ;
Fragment Fragment2Name = new EditFragment();
tab1.setTabListener(new MyTabListener(Fragment1Name));
tab2.setTabListener(new MyTabListener(Fragment2Name));
actionBar.addTab(tab1);
actionBar.addTab(tab2);
}
class MyTabListener implements ActionBar.TabListener
{
//接收每個tab得fragment
private Fragment fragment;
public MyTabListener(Fragment fragment)
{
this.fragment = fragment;
}
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.replace(R.id.context, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
ft.remove(fragment);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(Tag, "onDestory()............");
}
@Override
protected void onPause() {
super.onPause();
Log.i(Tag, "onPause()............");
}
@Override
protected void onResume() {
super.onResume();
Log.i(Tag, "onResume()............");
}
@Override
protected void onStart() {
super.onStart();
Log.i(Tag, "onStart()............");
}
@Override
protected void onStop() {
super.onStop();
Log.i(Tag, "onStop()............");
}
}
Fragment裡
package com.example.actionbar1;
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.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Calculator1Fragment extends Fragment {
static String Tag = "Fragment1";
public void onCreate(Bundle savedInstanceState)
Log.i(Tag, "onCreate()............");
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
Log.i(Tag, "onCreateView()............");
return inflater.inflate(R.layout.main_calcurator, container, false);
}
public void onActivityCreated (Bundle savedInstanceState){
Log.i(Tag, "onActivityCreate()............");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.i(Tag, "onDestroyView()............");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(Tag, "onDestroy()............");
}
@Override
public void onDetach() {
super.onDetach();
Log.i(Tag, "onDetach()............");
}
@Override
public void onPause() {
super.onPause();
Log.i(Tag, "onPause()............");
}
@Override
public void onResume() {
super.onResume();
Log.i(Tag, "onResume()............");
}
@Override
public void onStart() {
super.onStart();
Log.i(Tag, "onStart()............");
}
@Override
public void onStop() {
super.onStop();
Log.i(Tag, "onStop()............");
}
@Override
public void onAttach(Activity activity) {
Log.i(Tag, "onAttach()............");
super.onAttach(activity);
}
}
接著打開LogCat來看看life Cycle
- 當我run這個app的時候,life Cycle為
在fragment onResume之後開始執行Fragment內容
- 接著離開程式
程式end - 執行中按下Home,在叫回來
當按下home鍵時,程式只是onstop(),並不會銷毀
接著再把他叫回來繼續執行Fragment
沒有留言:
張貼留言