fragment做为宿主activity UI的一部分, 被作为activity整个view hierarchy的一部分被嵌入. 
有2种方法你可以添加一个fragment到activity layout:
一、在activity的layout文件中声明fragment
 
你可以像为View一样, 为fragment指定layout属性(sdk3.0以后).
例子是一个有2个fragment的activity:
 
  - <?xml version="1.0" encoding="utf-8"?>  
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
-     android:orientation="horizontal"  
-     android:layout_width="match_parent"  
-     android:layout_height="match_parent">  
-      <fragment android:name="com.example.news.ArticleListFragment"  
-             android:id="@+id/list"  
-             android:layout_weight="1"  
-             android:layout_width="0dp"  
-             android:layout_height="match_parent" />  
-      <fragment android:name="com.example.news.ArticleReaderFragment"  
-             android:id="@+id/viewer"  
-             android:layout_weight="2"  
-             android:layout_width="0dp"  
-             android:layout_height="match_parent" />  
-   </LinearLayout>  
 
<fragment> 中的 android:name 
属性指定了在layout中实例化的Fragment类. 
当系统创建这个activity layout时, 
它实例化每一个在layout中指定的fragment,并调用每一个上的onCreateView()方法,来获取每一个fragment的layout. 
系统将从fragment返回的 View 直接插入到<fragment>元素所在的地方. 
注意: 
每一个fragment都需要一个唯一的标识, 
如果activity重启,系统可以用来恢复fragment(并且你也可以用来捕获fragment来处理事务,例如移除它.) 
有3种方法来为一个fragment提供一个标识:
为 
android:id 属性提供一个唯一ID.
为 android:tag 
属性提供一个唯一字符串.
如果以上2个你都没有提供, 
系统使用容器view的ID.
二、使用FragmentManager将fragment添加到一个已存在的ViewGroup.
当activity运行的任何时候, 
都可以将fragment添加到activity 
layout.只需简单的指定一个需要放置fragment的ViewGroup.为了在你的activity中操作fragment事务(例如添加,移除,或代替一个fragment),必须使用来自 
FragmentTransaction 的API.
可以按如下方法,从你的Activity取得一个 
FragmentTransaction 的实例:
 
 
  - FragmentManager fragmentManager = getFragmentManager();   
- FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();  
 
然后你可以使用 add() 方法添加一个fragment, 指定要添加的fragment, 和要插入的view.
 
 
  - ExampleFragment fragment = new ExampleFragment();  
-  fragmentTransaction.add(R.id.fragment_container, fragment);   
- fragmentTransaction.commit();  
 
add()的第一个参数是fragment要放入的ViewGroup, 由resource ID指定, 
第二个参数是需要添加的fragment.一旦用FragmentTransaction做了改变,为了使改变生效,必须调用commit(). 
上一篇我们讲解了Fragment的加载方式,这次我们以一个实例来讲解:
布局:
 
  - <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  
-     xmlns:tools="http://schemas.android.com/tools"  
-     android:layout_width="match_parent"  
-     android:layout_height="match_parent"  
-     android:paddingBottom="@dimen/activity_vertical_margin"  
-     android:paddingLeft="@dimen/activity_horizontal_margin"  
-     android:paddingRight="@dimen/activity_horizontal_margin"  
-     android:paddingTop="@dimen/activity_vertical_margin"  
-     tools:context=".MainActivity" >  
-   
- <fragment class="com.xys.fragmentdemo.TitleFragment"  
-     android:id="@+id/titles"  
-     android:layout_weight="1"  
-     android:layout_width="match_parent"  
-     android:layout_height="match_parent"  
-     />  
- <FrameLayout android:id="@+id/detials"  
-     android:layout_weight="1"  
-     android:layout_width="match_parent"  
-     android:layout_height="match_parent"  
-     android:background="@android:color/darker_gray"></FrameLayout>  
-   
- </LinearLayout >  
 
以上布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用 
中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。
 
TitleFragment:
 
  - package com.xys.fragmentdemo;  
- import android.app.Fragment;  
- import android.app.FragmentTransaction;  
- import android.app.ListFragment;  
- import android.os.Bundle;  
- import android.view.View;  
- import android.widget.ArrayAdapter;  
- import android.widget.ListView;  
-   
-   
- public class TitleFragment extends ListFragment {  
-   
-     public int currentChoosePosition=0;  
-     public int showChoosePosition=-1;  
-       
-     @Override  
-     public void onListItemClick(ListView l, View v, int position, long id) {  
-           
-         showDetials(position);  
-     }  
-   
-     @Override  
-     public void onActivityCreated(Bundle savedInstanceState) {  
-           
-         super.onActivityCreated(savedInstanceState);  
-         setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1,Data.TitleData));  
-         if(savedInstanceState!=null){  
-             currentChoosePosition=savedInstanceState.getInt("currentChoose",0);  
-             showChoosePosition=savedInstanceState.getInt("showChoose",-1);  
-         }  
-         getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);  
-     }  
-   
-     @Override  
-     public void onSaveInstanceState(Bundle outState) {  
-           
-         super.onSaveInstanceState(outState);  
-         outState.putInt("currentChoose", currentChoosePosition);  
-         outState.putInt("showChoose", showChoosePosition);  
-     }  
-       
-     public void showDetials(int index){  
-         currentChoosePosition=index;  
-         getListView().setItemChecked(index, true);  
-         if(showChoosePosition!=currentChoosePosition){  
-               
-             DetialFragment df=DetialFragment.newInstance(index);  
-               
-             FragmentTransaction ft=getFragmentManager().beginTransaction();  
-                
-             ft.replace(R.id.detials, df);  
-             ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);  
-             ft.commit();  
-             showChoosePosition=index;  
-         }  
-     }  
-       
- }  
 
DetialFragment:
 
 
  - package com.xys.fragmentdemo;  
-   
- import android.app.Fragment;  
- import android.content.res.TypedArray;  
- import android.os.Bundle;  
- import android.util.TypedValue;  
- import android.view.LayoutInflater;  
- import android.view.View;  
- import android.view.ViewGroup;  
- import android.widget.ScrollView;  
- import android.widget.TextView;  
-   
-   
- public class DetialFragment extends Fragment {  
-   
-     public static DetialFragment newInstance(int index) {  
-           
-         DetialFragment df=new DetialFragment();  
-         Bundle bundle=new Bundle();  
-         bundle.putInt("index", index);  
-         df.setArguments(bundle);  
-         return df;  
-     }  
-   
-     @Override  
-     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
-             Bundle savedInstanceState) {  
-           
-         if(container==null){  
-             return null;  
-         }  
-         ScrollView scrollView=new ScrollView(getActivity());  
-         TextView tv=new TextView(getActivity());  
-         int padding=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics());  
-         tv.setPadding(padding, padding, padding, padding);  
-         scrollView.addView(tv);  
-         tv.setText(Data.ContextData[getArguments().getInt("index",0)]);  
-         return scrollView;  
-     }  
-       
- }  
 
Data:
 
 
  - package com.xys.fragmentdemo;  
-   
- public class Data {  
-     public static final String TitleData[]={"Title1","Title2","Title3","Title4","Title5"};  
-     public static final String ContextData[]={"Context1","Context2","Context3","Context4","Context5"};  
- }  
 
国际惯例 上效果图:
 

Android UI详解之Fragment加载
原文:http://www.cnblogs.com/duanxz/p/3564916.html