Android之Fragment的使用(二)

宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子。就算跌倒也要豪迈的笑。


本讲内容:Fragment的使用


一、Fragment的生命周期

Fragment和活动一样一共有运行状态、暂停状态、停止状态、和销毁状态这四种。


Fragment比Activity多了几个额外的生命周期回调方法:
onAttach()   、onCreateView() 、onActivityCreated()、onDestoryView()、onDetach() 


示例一:(在上一讲基础下修改)

修改RightFragment中的代码

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

	/**
	 * 当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
	 */
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		Log.d(TAG, "onAttach");
	}

	/**
	 * 创建Fragment时会回调,只会调用一次
	 */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.d(TAG, "onCreate");
	}

	/**
	 *  碎片创建视图(加载布局)时调用
	 */
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.d(TAG, "onCreateView");
		// 通过LayoutInflater的inflate()方法将定义的布局动态加载进来
		View view = inflater.inflate(R.layout.right_fragment, container, false);
		return view;
	}

	/**
	 * 当Fragment所在的Activty启动完成后调用(当Activity的onCreate方法返回时调用)
	 */
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		Log.d(TAG, "onActivityCreated");
	}

	/**
	 * 启动Fragment调用
	 */
	public void onStart() {
		super.onStart();
		Log.d(TAG, "onStart");
	}

	/**
	 * 恢复Fragment时会被回调,调用onStart()方法后面一定会调用onResume()方法
	 */
	public void onResume() {
		super.onResume();
		Log.d(TAG, "onResume");
	}

	/**
	 * 暂停Fragment调用
	 */
	public void onPause() {
		super.onPause();
		Log.d(TAG, "onPause");
	}

	/**
	 * 停止Fragment调用
	 */
	public void onStop() {
		super.onStop();
		Log.d(TAG, "onStop");
	}

	/**
	 * 销毁Fragment所包含的View组件时调用
	 */
	public void onDestroyView() {
		super.onDestroyView();
		Log.d(TAG, "onDestroyView");
	}

	/**
	 * 销毁Fragment时会被回调
	 */
	public void onDestroy() {
		super.onDestroy();
		Log.d(TAG, "onDestroy");
	}

	/**
	 * Fragment从Activity中删除时会回调该方法,并且这个方法只会调用一次
	 */
	public void onDetach() {
		super.onDetach();
		Log.d(TAG, "onDetach");
	}
}
</pre><pre class="java" name="code">


运行程序


可以看到当RightFragment第一次被加载到屏幕上时,会依次执行上面方法。然后点击LeftFragment中的按钮


由于AnotherRightFragment替换了RightFragment,此时的RightFragment进入了停止状态,因此会依次执行上面三个方法。当然如果在替换时没有调用addToBackStack()方法,此时RightFragment就会进入销毁状态,onDestroy()和

onDetach()方法就会执行。接着按下Back键,RightFragment会重新回到屏幕。


由于RightFragment重新回到运行状态,因此上面三个方法会依次执行,注意此时onCreate()和onCreateView()方法并不会执行,因为我们借助了addToBackStack()方法使得RightFragment和它的视图并没有销毁。再按下Back键


会依次执行上面的方法,最终将活动和碎片一起销毁。

注意:在碎片中也可以通过onSaveInstanceState()方法来保存数据的,因为进入停止状态的碎片有可能在系统内存不足的时候被回收,保存下来的数据在onCreate()、onCreateView()、和onActivityCreated()这三个方法中都可以重新得到,它们都有一个Bundle类型的onSaveInstanceState参数。


示例二:使用限定符(待续。。。)

怎样才能在运行时判断程序应该是使用双页模式还是单页模式,这就需要借助限定符来实现了。



Take your time and enjoy it


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值