Android——Fragment的生命周期及其回掉方法...
来源:互联网 发布:spark 推荐算法 编辑:程序博客网 时间:2024/06/05 02:22
之前有说到,Fragment的生命周期收宿主Activity生命周期的影响…
先来看一张图:
这便是Fragment的生命周期和回调方法,和宿主Activity生命周期的影响:
每一个Activity生命周期至少有一个Fragment的生命周期相对应。
现在来做一个实例:
接着上一个项目,通过Fragment中各个回调方法日志log打印出来。
新建两个Fragment类:MyFragment3和MyFragment4,两个内容是一样的,打印无非是区分一下。
MyFragment3:
package com.example.fragmenttest;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.ViewGroup;import android.widget.TextView;public class MyFragment3 extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub// 每次创建都会绘制Fragment的View组件回调 View view = inflater.inflate(R.layout.fragment2,container, false); TextView tv=(TextView) view.findViewById(R.id.fg2_tv); tv.setText("第一个Fragment"); Log.i("lpl", "Fragment1-onCreateView"); return view; } //当Fragment被添加到Activity中的时候会回调这个方法,只调用一次。 @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); Log.i("lpl", "Fragment1-onAttach"); } //创建Fragment的时候会回调,该方法只回调一次 @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Log.i("lpl", "Fragment1-onCreate"); } // 当Fragment所在的Activity启动后调用 @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); Log.i("lpl", "Fragment1-onActivityCreated"); }// 启动Fragment @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i("lpl", "Fragment1-onStart"); }// 恢复Fragment时会被回调,调用onstart方法后一定调用该方法 @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i("lpl", "Fragment1-onResume"); }// 暂停Fragment @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); Log.i("lpl", "Fragment1-onPause"); }// 停止Fragment @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i("lpl", "Fragment1-onStop"); }// 销毁Fragment所包含的View组件是调用 @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); Log.i("lpl", "Fragment1-onDestroyView"); }// 销毁Fragment时会被回调 @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("lpl", "Fragment1-onDestroy"); }// Fragment从Activity删除时会回调该方法,该方法只会被调用一次 @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); Log.i("lpl", "Fragment1-onDetach"); }}
Fragment4就不再重复写了。
Fragment的布局文件fragment2.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" > <TextView android:id="@+id/fg2_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
跳转到另一个Activity进行碎片Fragment的添加:
Mainactivity3:
package com.example.fragmenttest;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Mainactivity3 extends Activity{ private boolean flag=false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main3); init(); Button bt=(Button) findViewById(R.id.main3_bt); bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); if(flag){ MyFragment3 fragment=new MyFragment3(); beginTransaction.replace(R.id.main_layout, fragment); flag=false; } else{ MyFragment4 fragment=new MyFragment4(); beginTransaction.replace(R.id.main_layout, fragment); flag=true; } beginTransaction.commit(); } }); } private void init() { // TODO Auto-generated method stub MyFragment3 fragment=new MyFragment3(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); beginTransaction.add(R.id.main_layout, fragment); beginTransaction.commit(); }}
通过按钮的点击可以切换Fragment。
它的布局文件main3.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/main3_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="切换Fragment" /></LinearLayout>
这里将LinearLayout进行了+id,一会碎片Fragment会加到这个布局中。
在对应的Mainactivity中生命周期那块继续添加代码:
package com.example.fragmenttest;import android.app.Activity;import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;public class MainActivity extends Activity { private RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rg = (RadioGroup) findViewById(R.id.main_rg); rg.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.main_bt: Intent intent=new Intent(); intent.setClass(MainActivity.this, MainActivity2.class); startActivity(intent); break; case R.id.main_bt1: MyFragment2 fragment=new MyFragment2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); beginTransaction.add(R.id.main_ll, fragment); beginTransaction.addToBackStack(null); beginTransaction.commit(); break; case R.id.main_bt2: Intent intent1=new Intent(); intent1.setClass(MainActivity.this, Mainactivity3.class); startActivity(intent1); break; case R.id.main_bt3: break; default: break; } } }); }}
让Fragment做以下几个步骤:
启动Fragment——>屏幕锁屏——>屏幕解锁——>切换到第二个Fragment——>回到桌面——>回到应用——>退出
Fragment。
1、启动Fragment:
onAttach——>onCreate——>onCreateView——>onActivityCreate——>onStart——>onResume。
2、屏幕锁屏
onPause——>onStop。
3、屏幕解锁
onStart——>onResume。
4、切换到第二个Fragment:
第一个Fragment:onPause——>onStop——>onDestroyView——>onDestroy——>onDetach。
第二个Fragment:onAttach——>onCreate——> onCReatView——>onActivityCreate——>onStart——>onResume。
5、回到桌面
onPause——>onStop。
6、回到应用:
onStart——>onResume。
7、退出Fragment:
onPause——>onStop——>onDestroyView——>onDestroy——>onDetach。
- Android——Fragment的生命周期及其回掉方法...
- Android—Fragment生命周期
- Android中的Fragment ——03(Fragment的生命周期)
- Android Fragment——处理Fragment生命周期
- 我的Android之旅(七)--Fragment及其生命周期
- Android-Fragment的生命周期
- 【Android】Fragment的生命周期
- Android Fragment的生命周期
- [Android] Fragment 的生命周期
- Android Fragment的生命周期
- Android的fragment生命周期
- android---fragment的生命周期
- Android Fragment的生命周期
- Android Fragment的生命周期
- Android Fragment 基本介绍及其生命周期讲解
- Android Fragment——与Activity生命周期的协调
- Android温习 —— Activity和Fragment的生命周期
- 《Android那些事》——Fragment的生命周期及常见问题
- android带气泡的第三方选项卡
- centos7安装与配置dhcp服务
- 一个java程序的分析
- EF+SQLSERVER控制并发下抢红包减余额(改进)
- hibernate基础知识一
- Android——Fragment的生命周期及其回掉方法...
- android各种优化(持续更新)——android新人
- CF389A:Fox and Number Game(简单数论)
- 关于空间两点之间距离的java程序之分析
- hibernate基础知识二
- 【java】Comparator的用法
- Qt多线程简单总结
- sprintf
- Volley的使用