自己好久不写APK的界面部分了,平时的工作主要集中在APK的控制层和模型层,
或者干脆就深入到Android框架及更底层的部分了,因此许多界面的知识都有些遗忘了。
这次主要结合Android权威指南中的例子,回忆一下以前的知识,以博客的方式记录一下,
Android中使用android.support.v4.app.Fragment的基本方式。
一、Fragment的使用
我们知道Fragment的生命周期由嵌入的Activity管理。
Activity托管Fragment主要有如下两种方式:
1、在Activity的布局中添加fragment;
2、在Activity的代码中加入fragment。
第一种方式就是使用布局fragment。这种方式简单但不够灵活。
在Activity的布局中添加fragment,就等同于将fragment及其视图与activity的视图绑定在一起,
并且在activity的生命周期过程中,无法切换fragment视图。
第二种方式比较复杂,但也是唯一可以在运行时控制fragment的方式。
我们可以自行决定何时添加fragment、移除fragment等。
因此,为了追求真正灵活的UI设计,就必须以第二种方式,即以代码的方式添加fragment。
接下来,我们就看看以代码添加fragment的步骤。
考虑到兼容性,我们主要使用的是android支持库中的fragment,即android.support.v4.app.Fragment等相关类。
Fragment终究是需要嵌入到activity中,因此首先需要定义Activity的布局,示例如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
示例Activity的布局及其简单,就是定义一个FrameLayout,作为Fragment布局的容器。
对应的Activity代码如下:
//定义一个抽象的父类
public abstract class SingleFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
//FragmentManager管理fragment队列等
FragmentManager fm = getSupportFragmentManager();
//R.id.fragment_container是fragment容器的id
//先从Fragment队列中查找是否有容器id对应的fragment
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
if (fragment == n