当前位置: 代码迷 >> Android >> Android Fragment详解(2)->生命周期详解
  详细解决方案

Android Fragment详解(2)->生命周期详解

热度:58   发布时间:2016-04-28 07:50:32.0
Android Fragment详解(二)--->生命周期详解

MainActivity如下:

package cc.testsimplefragment1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * Demo描述: * Fragment生命周期 *  * 测试方法: * 在界面中从上至下点击各个按钮 *  * 参考资料: * 1 Android疯狂讲义(第二版) * 2 http:[email protected]/blog/static/4126004120131710545228/ * 3 http://blog.csdn.net/t12x3456/article/details/8104574 *   Thank you very much *  */public class MainActivity extends Activity{	private Button mStartActivityButton;	private Button mAddFragmentButton;	private Button mReplaceAndBackFragmentButton;	private Button mReplaceFragmentButton;	private Button mFinishButton;	@Override	public void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		init();	}		private void init(){		mStartActivityButton = (Button) findViewById(R.id.startActivityButton);		mStartActivityButton.setOnClickListener(new ClickListenerImpl());				mAddFragmentButton = (Button) findViewById(R.id.addFragmentButton);		mAddFragmentButton.setOnClickListener(new ClickListenerImpl());				mReplaceAndBackFragmentButton = (Button) findViewById(R.id.replaceAndBackFragmentButton);		mReplaceAndBackFragmentButton.setOnClickListener(new ClickListenerImpl());				mReplaceFragmentButton = (Button) findViewById(R.id.replaceFragmentButton);		mReplaceFragmentButton.setOnClickListener(new ClickListenerImpl());				mFinishButton = (Button) findViewById(R.id.finishButton);		mFinishButton.setOnClickListener(new ClickListenerImpl());	}		private class ClickListenerImpl implements OnClickListener{		@Override		public void onClick(View view) {			switch (view.getId()) {			case R.id.startActivityButton:				Intent intent = new Intent(MainActivity.this, DialogStyleActivity.class);				startActivity(intent);				break;			case R.id.addFragmentButton:				TestLifecycleFragment testLifecycleFragment = new TestLifecycleFragment();				getFragmentManager()				.beginTransaction()				.add(R.id.linearLayoutContainer, testLifecycleFragment)				.commit();				break;			case R.id.replaceAndBackFragmentButton:				AnotherFragment anotherFragment1 = new AnotherFragment();				getFragmentManager()				.beginTransaction()				.replace(R.id.linearLayoutContainer, anotherFragment1)				.addToBackStack("test")				.commit();				break;			case R.id.replaceFragmentButton:				AnotherFragment anotherFragment2 = new AnotherFragment();				getFragmentManager()				.beginTransaction()				.replace(R.id.linearLayoutContainer, anotherFragment2)				.commit();				break;			case R.id.finishButton:				finish();				break;			default:				break;			}					}			}}


TestLifecycleFragment如下:

package cc.testsimplefragment1;import android.app.Activity;import android.app.Fragment;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class TestLifecycleFragment extends Fragment {	final String TAG = "log";	/**	 * 该Fragment被添加到Activity时调用.	 * 只会被调用一次	 */	@Override	public void onAttach(Activity activity) {		super.onAttach(activity);		Log.d(TAG, "-------onAttach------");	}	/**	 * 创建该Fragment时调用.	 * 只会被调用一次	 */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		Log.d(TAG, "-------onCreate------");	}	/**	 * 每次创建和绘制该Fragment的View组件时调用.	 * Fragment会显示该方法返回的View	 */	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle data) {		Log.d(TAG, "-------onCreateView------");		TextView tv = new TextView(getActivity());		tv.setGravity(Gravity.CENTER_HORIZONTAL);		tv.setText("这是一个用于测试的Fragment");		tv.setTextSize(40);		return tv;	}	/**	 * 当Fragment所在的Activity被启动完成后	 * 调用该方法	 */	@Override	public void onActivityCreated(Bundle savedInstanceState) {		super.onActivityCreated(savedInstanceState);		Log.d(TAG, "-------onActivityCreated------");	}	/**	 * 启动Fragment时候调用该方法	 */	@Override	public void onStart() {		super.onStart();		Log.d(TAG, "-------onStart------");	}	/**	 * 恢复Fragment时候调用该方法.	 * onStart()方法后一定会调用该onResume()方法	 */	@Override	public void onResume() {		super.onResume();		Log.d(TAG, "-------onResume------");	}	    /**     * 暂停Fragment时候调用该方法     */	@Override	public void onPause() {		super.onPause();		Log.d(TAG, "-------onPause------");	}	/**     * 停止Fragment时候调用该方法     */	@Override	public void onStop() {		super.onStop();		Log.d(TAG, "-------onStop------");	}	/**     * 销毁该Fragment所包含的View调用该方法     */	@Override	public void onDestroyView() {		super.onDestroyView();		Log.d(TAG, "-------onDestroyView------");	}	/**     * 销毁该Fragment时调用该方法     * 该方法只会被调用一次     */	@Override	public void onDestroy() {		super.onDestroy();		Log.d(TAG, "-------onDestroy------");	}	/**     * 将该Fragment从Activity中被删除,替换时调用该方法     * 在onDestroy()方法后一定会调用该onDetach()方法.     * 该方法只会被调用一次     */	@Override	public void onDetach() {		super.onDetach();		Log.d(TAG, "-------onDetach------");	}}


AnotherFragment如下:

package cc.testsimplefragment1;import android.app.Fragment;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class AnotherFragment extends Fragment {	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle data) {		TextView textView = new TextView(getActivity());		textView.setGravity(Gravity.CENTER_HORIZONTAL);		textView.setText("另外一个Fragment");		textView.setTextSize(40);		return textView;	}}


DialogStyleActivity如下:

package cc.testsimplefragment1;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;/** * 备注说明: * 该Activity是对话框风格的Activity * 所以需要在配置文件中设置: * android:theme="@android:style/Theme.Holo.Dialog" * */public class DialogStyleActivity extends Activity{	@Override	public void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstanceState);		TextView textView = new TextView(this);		textView.setText("对话框风格的Activity");		setContentView(textView);	}}


main.xml如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout        android:id="@+id/linearLayoutContainer"        android:layout_width="wrap_content"        android:layout_height="160dp" >    </LinearLayout>    <Button        android:id="@+id/addFragmentButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="加载目标Fragment" />        <Button        android:id="@+id/startActivityButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="启动对话框风格的Activity" />    <Button        android:id="@+id/replaceAndBackFragmentButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="替换目标Fragment,并加入Back栈" />    <Button        android:id="@+id/replaceFragmentButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="替换目标Fragment" />    <Button        android:id="@+id/finishButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="退出" /></LinearLayout>


AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?><manifest	xmlns:android="http://schemas.android.com/apk/res/android"	package="cc.testsimplefragment1"	android:versionCode="1"	android:versionName="1.0">	<uses-sdk		android:minSdkVersion="11"		android:targetSdkVersion="17" />	<application		android:icon="@drawable/ic_launcher"		android:label="@string/app_name">		<activity			android:name=".MainActivity"			android:label="@string/app_name">			<intent-filter>				<action android:name="android.intent.action.MAIN" />				<category android:name="android.intent.category.LAUNCHER" />			</intent-filter>		</activity>				<activity		    android:theme="@android:style/Theme.Holo.Dialog"			android:name=".DialogStyleActivity"			android:label="@string/app_name" />			</application></manifest>


 

  相关解决方案