您的位置:首页 > 其它

Fragment生命周期

2015-10-16 09:41 162 查看

从布局文件加载示例

activity

package com.example.fragmentdemo;

import com.example.androiddemo.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}

@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}


layout  activity_main.xml

<RelativeLayout 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" >

<fragment
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.example.fragmentdemo.Fragment1" />

</RelativeLayout>


fragment

package com.example.fragmentdemo;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment1 extends Fragment {
private static final String TAG = "Fragment1";

@Override
public void onAttach(Context context) {
Log.d(TAG, "onAttach");
super.onAttach(context);
}

@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

Log.d(TAG, "onCreateView");
TextView text = new TextView(getActivity());
text.setText("hello world");
return text;
}

@Override
public void onResume() {
Log.d(TAG, "onResume");
super.onResume();
}

@Override
public void onPause() {
Log.d(TAG, "onPause");
super.onPause();
}

@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
}
}

logcat

创建
10-16 09:34:47.520: D/MainActivity(24075): onCreate
10-16 09:34:47.610: D/Fragment1(24075): onCreate

10-16 09:34:47.610: D/Fragment1(24075): onCreateView
10-16 09:34:47.660: D/MainActivity(24075): onResume
10-16 09:34:47.660: D/Fragment1(24075): onResume

退出
10-16 09:36:07.620: D/Fragment1(24075): onPause

10-16 09:36:07.620: D/MainActivity(24075): onPause
10-16 09:36:08.140: D/Fragment1(24075): onDestroy
10-16 09:36:08.140: D/MainActivity(24075): onDestroy

代码中动态加载示例

Activity 代码

package com.example.fragmentdemo;

import com.example.androiddemo.R;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class MainActivity2 extends Activity {

private static final String TAG = "MainActivity";

Fragment2 mFragment2;

@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
mFragment2 = new Fragment2();
}
}, 3000);

handler.postDelayed(new Runnable() {
public void run() {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, mFragment2);
fragmentTransaction.commit();
}
}, 6000);
}

@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}

@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}

layout activity_main2.xml

<RelativeLayout 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" >

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</RelativeLayout>

Fragment

package com.example.fragmentdemo;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
import android.widget.TextView;

public class Fragment2 extends Fragment {

private static final String TAG = "Fragment2";

@Override
public void onAttach(Context context) {
Log.d(TAG, "onAttach context");
super.onAttach(context);
}

@Override
public void onAttach(Activity activity) {
Log.d(TAG, "onAttach activity");
super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
TextView text = new TextView(getActivity());
text.setText("2222222");
return text;
}

@Override
public void onPause() {
Log.d(TAG, "onPause");
super.onPause();
}

@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
}
}


Logcat

启动

10-16 10:16:43.710: D/MainActivity(26928): onCreate

10-16 10:16:43.750: D/MainActivity(26928): onResume

10-16 10:16:49.750: D/Fragment2(26928): onAttach activity

10-16 10:16:49.750: D/Fragment2(26928): onCreate

10-16 10:16:49.750: D/Fragment2(26928): onCreateView

退出
10-16 10:16:52.440: D/Fragment2(26928): onPause

10-16 10:16:52.440: D/MainActivity(26928): onPause

10-16 10:16:52.870: D/Fragment2(26928): onDestroy

10-16 10:16:52.870: D/MainActivity(26928): onDestroy

从日志中可以看到onCreate 3秒后, Fragment 实例化(new)的时候,并没有执行该Fragment的 onCreate()。

而是在6秒后,FragmentTransition commit()方法执行时,onAttach onCreate onCreateView 依次被执行。

此外,这个示例中,前6秒界面都是空白的,直至6秒后,才有字符串“222222”的显示。也就是说onCreateView执行后,界面上立即显示了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: