http://download.csdn.net/detail/miao033009/8649105 demo下载地址
为了在android上面创建动态的或者复合面板型的用户UI,你需要把你的组件或者活动行为放到一个模块中,这个模块便可以进出Activity。Fragment类可以帮助你创建这种模块,他表现的就想一个内嵌的Activity,他拥有自己的布局以及自己的生命周期。
当碎片有了自己的布局后,他就可以和其他的碎片自由组合,从而为你的Activity提供不同屏幕尺寸下的布局结构。(比如屏幕小,可以显示一个碎片,屏幕大了便可以显示两个或者更多)。
下面的demo主要讲了如何用碎片创造一个动态的用户体验,并且优化你的程序在多种屏幕下的用户体验。
A:创建一个碎片
你可以把碎片看作是Activity中的一个片段,拥有自己的生命周期,拥有自己的输入事件,可以添加到或者删除从你运行的Activity中,(就像一种“子Activity”,你可以在所有的Activity中重复使用)。通过支持库,你可以使用碎片,并且保证就算在1.6android版本下依然兼容。
注意:如果你确定你的程序API为11或者更高,你就不需要使用支持库了,可以直接用标准库框架里面的碎片以及相关的API。这个demo用到了支持库,这个库有特殊的名字并且有时可能和标准库中的API有点不同。
在学习之前,你必须知道怎么使用支持库:
a:打开你的SDK Manager。
b:找到extras目录。
c:选中Android support library 项。
d:点击Install packages...按钮。
下载完成后,支持库位于<sdk>/extras/android/support/文件夹下。
e:在你要使用支持库的项目的根目录创建libs文件夹。
f:
并且把之前下载好的.jar 支持库文件拷贝到libs文件夹中。
g:右键jar文件 选择Build Path ->Add to Build Path。
现在可以正式开始学习创建一个碎片(Fragment)了。
A.a 创建一个碎片类
一个碎片类继承自Fragment,然后复写他的一些关键生命周期方法,并在其中添加你应用的逻辑,就和你使用Activity时一样。
与Activity不同的是,在Fragment中你需要在onCreateView()中定义他的布局,实际上,你只要复写这一个方法就可以让你的Fragment运行了。下面就是一个拥有自己布局的简单Fragment:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;
public class ArticleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.article_view, container, false);
}
}
和Activity一样,Fragment也应该复写其他的生命周期方法,这样可以让你随着他被添加到或者删除从Activity时,或者在Activity的生命周期切换时,改变他自己的状态。例如,当Activity执行isPause()时,Activity中的所有Fragment也都将执行自己的isPause()。
A.b 通过xml将Fragment添加到Activity中
因为Fragment是可重复利用,模块化的UI控件,每一个Fragment的实例必须包含在FragmentActivity中,我们可以通过把每个Fragment放到Activity的布局文件中完成这个目标。
注意:FragmentActivity是支持库中的一个特殊的Activity用来在API低于11的系统下处理Fragment,如果应用的最小API为11或者更高,那么就用常规的Activity就可以了。
下面是一个例子,在一个Activity的布局中添加了两个Fragment,并且在屏幕被认为是“大”的时候显示。用large这个限定词说明res/layout-large/news_articles.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.android.fragments.ArticleFragment"
android:id="@+id/article_fragment"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
然后给你的Activity添加布局
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
注意:如果是通过xml添加Fragment到Activity中的,那么在程序运行时将不可以把他从Activity中移除,如果你想在和用户交互的过程中添加或者移除Fragment到Activity,那么你必须在Activity首次启动时添加他,将在下面介绍这种方法。