Android中的Fragment使用详解之生命周期
2015-01-20 15:48
435 查看
Fragment的生命周期,关键方法:onAttach()、onCreateView(),下面Fragment的生命周期进行测试
1、Fragment的布局文件
上面代码中对各个方法也有注释,测试时可以在每个方法中打印标记即可。
3、Activity布局
1、Fragment的布局文件
<?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" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>2、这里需要两个Fragment进行切换测试,MyFragment3和MyFragment3_1只要TextView的内容不同,能够看到变化效果就可以了,其他代码相同。这里只放一个。
package com.cx.testdemo; /** * 生命周期1 */ import android.annotation.SuppressLint; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; /** * 启动1,2,3,4,5,6 * 锁屏7,8 * 解锁5,6 * 切换7,8,9,10,11(第二个Fragment)1,23,4,5,6 * home 7,8 * home回来 5,6 * 返回退出7,8,9,10,11 */ @SuppressLint("NewApi") public class MyFragment3 extends Fragment { /** * 3、每次创建都会绘制Fragment的View组建时回调该方法 */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // layout文件转化为View对象(需要加载的布局文件,加载layout的父ViewGroup,是否返回父窗体ViewGroup) View view = inflater.inflate(R.layout.fragment3, container, false); TextView textView = (TextView) view.findViewById(R.id.textView1); textView.setText("第二个Fragment"); return view; } /** * 1、当Fragment被添加到Activity时会回调,只会调用一次 */ @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); } /** * 2、创建Fragment时候会回调这个方法,并且只调用一次 */ @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } /** * 4、当Fragment所在的Activity启动完成后调用 */ @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); } /** * 5、启动Fragment */ @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); } /** * 6、恢复Fragment时会被回调,调用onStart()方法后一定调用onResume()方法 */ @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); } /** * 7、暂停Fragment */ @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); } /** * 8、停止Fragment */ @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); } /** * 9、销毁Fragment所包含的View组件时 */ @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); } /** * 10、销毁Fragment时会被回调 */ @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } /** * 11、Fragment从Activity删除时会被调用,只调用一次 */ @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); } }
上面代码中对各个方法也有注释,测试时可以在每个方法中打印标记即可。
3、Activity布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="切换Fragment" /> </LinearLayout>4、Activity页面功能实现
package com.cx.testdemo; /** * 生命周期 */ import android.annotation.TargetApi; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class MainActivity3 extends Activity { private Button button; private boolean flag = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main3); init(); button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); if(flag){ MyFragment3 frag3 = new MyFragment3(); beginTransaction.replace(R.id.layout, frag3); flag = false; }else{ MyFragment3_1 frag4 = new MyFragment3_1(); beginTransaction.replace(R.id.layout, frag4); flag = true; } beginTransaction.commit(); } }); } private void init() { // 动态加载 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); MyFragment3 frag3 = new MyFragment3(); beginTransaction.add(R.id.layout, frag3); beginTransaction.commit(); } }通过启动、锁屏、解锁、切换、退出等操作进行测试打印,测试结果已经在第2步的注释中列出。
相关文章推荐
- android开发之Fragment 的生命周期及使用方法详解
- Android Fragment使用详解及生命周期
- android开发之Fragment 的生命周期及使用方法详解
- Android Fragment详解(二):Fragment创建及其生命周期
- Android Fragment详解(二):Fragment创建及其生命周期
- Android Fragment详解(二):Fragment创建及其生命周期
- Fragment 的生命周期及使用方法详解
- Android Fragment使用详解
- Fragment 的生命周期及使用方法详解
- Fragment生命周期详解及使用
- Android Fragment 生命周期详解
- Android Fragment详解(二):Fragment创建及其生命周期
- Fragment 的生命周期及使用方法详解
- Android Fragment使用详解
- Android中的Fragment使用详解之页面加载
- Android Fragment详解(二):Fragment创建及其生命周期
- 【Android】FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- Android Fragment详解(二):Fragment创建及其生命周期
- Android中的Fragment使用详解之数据传递
- Android中的Fragment使用详解