左一:Fragment的生命周期 左二:Activity的生命周期和Fragment的生命周期的比较
Fragment的生命周期只有开始创建和结束的地方与Activity不同;
2,生命周期的分析;
1,创建时;
onAttach()
onCreate()
onCreateView()
onActivityCreated()
2,对用户可见
onstart()
onResume()
3,进入后台模式时;
onPause()
onstop()
4,退出时;
- onPause()
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
5,横屏切换时;
先销毁再重新创建
设置Fragment不重新创建需要在主配置文件设置
android:configChanges="orientation|screenSize"
二;动态替换Fargment技术分析
动态替换Fragment在android UI中使用的最广泛的
1,fragment1.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" android:background="#00FF00"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is fragment #1" android:textSize="25sp" /> </LinearLayout>
2,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" android:background="#FF0000" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is fragment #2" android:textSize="25sp" /> </LinearLayout>
3,使用java来操作fragment1.xml和fragment2.xml,并分别创建fragment1.java和fragment2.java
Fragment1 继承Fragment 重写onCreateView的方法
public class Frament1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d("Fragment", "onCreateView"); return inflater.inflate(R.layout.frament1, container,false); } }
分析Fragment1中的代码;
inflater.inflate(R.layout.frament1, container,false);获得布局文件,ViewGroup ,false
Fragment2中的代码;
public class Frament2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.frament2, container,false); } }
4,定义底部的图片按钮的布局文件 bottom_image.xml 每张图片添加监听事件
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="0,1,2,3" > <TableRow android:layout_height="80dp" android:layout_width="match_parent" android:background="#EEF990" > <ImageView android:id="@+id/img1" android:layout_width="wrap_content" android:layout_height="match_parent" android:src="@drawable/word" android:onClick="change" /> <ImageView android:id="@+id/img2" android:layout_width="wrap_content" android:layout_height="match_parent" android:src="@drawable/line" android:onClick="change" /> <ImageView android:id="@+id/img3" android:layout_width="wrap_content" android:layout_height="match_parent" android:src="@drawable/saoma" android:onClick="change" /> <ImageView android:id="@+id/img4" android:layout_width="wrap_content" android:layout_height="match_parent" android:src="@drawable/call" android:onClick="change" /> </TableRow> </TableLayout>
5,定义Fragment3来操作bottom_image.xml
public class Fragment3 extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //获得布局文件 View view=inflater.inflate(R.layout.bottom_image, container,false); return view; } }
6,定义布局文件(main.xml)给启动的类(MainActivity1)操作 (重点)
分析:动态切换的是中间位置,所以我们需要将中的使用布局表示;
<FrameLayout android:id="@+id/fragment2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/frament3" android:layout_below="@+id/frament1" />
main.xml 文件的内容
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:name="com.example.frament.Frament1" android:id="@+id/frament1" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <FrameLayout android:id="@+id/fragment2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/frament3" android:layout_below="@+id/frament1" /> <fragment android:id="@+id/frament3" android:name="com.example.frament.Fragment3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout>
feagment 有一个id
name;com.example.frament.Fragment3表示的是java的类 此时的Fragment3表示一个布局文件
7,启动程序的类
package com.example.frament; import android.annotation.SuppressLint; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.Display; import android.view.View; public class MainActivity1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // // //向活动添加碎片,根据屏幕的纵向和横向显示 // //1,获取碎片管理器 // FragmentManager fragment=getFragmentManager(); // //2,碎片的显示需要使用FragmentTransaction类操作 // FragmentTransaction transacction=fragment.beginTransaction(); // //获取屏幕管理器和默认的显示 // Display display=getWindowManager().getDefaultDisplay(); // //判断横屏 // if(display.getWidth()>display.getHeight()){ // //获取java类 // Frament1 frament1 = new Frament1(); // transacction.replace(android.R.id.content, frament1); // }else{ // Frament2 frament2 = new Frament2(); // transacction.replace(android.R.id.content, frament2); // } // //使用FragmentTransaction必须要commit // transacction.commit(); } //创建监听的方法 public void change(View v){ switch (v.getId()) { case R.id.img1: //获得Fragment的管理器 FragmentManager manager=getFragmentManager(); //获得事物的操作 FragmentTransaction transaction=manager.beginTransaction(); //创建对象 Frament1 fragment = new Frament1(); //添加内容 transaction.replace(R.id.fragment2, fragment); //提交 transaction.commit(); break; case R.id.img2: FragmentManager manager2=getFragmentManager(); FragmentTransaction transaction2=manager2.beginTransaction(); Frament2 fragment2 = new Frament2(); transaction2.replace(R.id.fragment2, fragment2); transaction2.commit(); break; } } }