你可以把fragment看成是activity的模块化部分,它拥有自己的生命周期,接受它自己的输入事件,你可以在activity运行时添加或者删除它(有点像是一个“子activity”,你可以在不同的activity中重用它)。本课将向你展示如何使用Support Libaray继承 Fragment
类来让你的应用能够兼容正在运行Android 1.6的设备。
Demo下载:http://download.csdn.net/detail/sweetvvck/7757891
提示: 如果你决定你的应用需求的最低API级别是11或者更高,那么你不需要使用Support Library,你可以直接使用包含Fragment类的平台相关的APIs。本课主要重点是使用Support Library的APIs,这和已经包含了Fragment类的平台版本的区别是使用了一个指定的包签名以及一些稍微不同的API名称。
在你开始这堂课之前,你必须要设置好你的项目,让他使用Support Library。如果你之前没有使用过Support Library,跟着Support Library Setup 文档来设置你的项目使用v4库。你也可以使用v7 appcompat 库让你的应用activity能够使用action bar,它能够兼容到Android 2.1 (API level 7) 并且同样包含Fragment
APIs。
创建一个Fragment
要创建一个Fragment,首先继承Fragment
类,然后覆盖主要的生命周期方法来插入了你的应用逻辑,类似你在Activity
类中所做的。
创建一个Fragment
与activity的一个不同点是,你必须使用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需要实现其他的回调方法,这样就能够允许你在它在actvity中被添加或移除时管理它的状态,就像是activity切换时它的生命周期状态。例如,当activity的onPause()
方法被调用,所有它内部的fragment都会收到onPause()
方法的回调。
更多关于fragment生命周期以及回调方法的信息,请查看Fragments 开发向导。
使用XML向activity中添加一个fragment
由于fragment是可重用的,模块化UI组件,它的每个实例都必须和一个父FragmentActivity
关联。你可以通过在你的activity的XML布局文件中定义fragment来获取这个关联。
提示: FragmentActivity
是在Support Library中提供的特殊的activity,用于处理在低于API级别为11的系统上使用fragment。如果你支持的最低系统版本的API级别是11或者更高,那么你可以直接使用普通的Activity
。
下面是一个在大屏设备布局上添加了两个fragment的例子。
<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); } }
如果你使用的是v7 appcompat library,你的activity中应该要使用ActionBarActivity
,它是FragmentActivity
的子类(更多信息,请查看Android学习路线(七)设置Action Bar)。
提示: 当你在activity的XML布局文件中添加一个fragment时,你不能再运行时移除这个fragment。如果你希望在用户交互中隐藏于现实你的fragment,你就必须在activity第一次启动时将fragment添加到activity中,在下堂课中会讲到。