ANDROID官方教程: 通过FRAGMENTS创建动态UI-(1) 创建fragment

吴统威 on 编程语言 android | 2015-06-29 16:09:50.0

        你可以认为一个fragment可以作为activity的一个模块化部分,拥有自身的生命周期,接收自身的输入事件,且在activity运行期间,还可以增加和移除(这个有点像一个"activity子类",在不同的activity之间可以重用它).这节课我们学会使用支持库怎么扩展Fragment类,所以你的APP需要保持兼容运行在Android1.6+设备上.

        在这节课开始之前,你必须设置你的android项目使用支持库.如果你没有使用支持库,按照"支持库设置"文档,设置你得项目使用v4库.不管怎么样,你也可以在activity中包含action bar,但是使用v7 appcompat库,这兼容android2.1(API level 7)且也包含Fragment API. 


创建一个Fragment类


创建一个Fragment的子类,覆盖关键生命周期的方法,类似使用Activity类的方式.

一个不同点就是创建Fragment后,必须实现使用onCreateView()调用定义的layout.事实上,这个调用是必须的,为了fragment的运行.例如,这里是一个简单的fragment,指定自己的layout:

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, 0, 0);
    }
}

像一个activity,fragment需要实现生命周期回调,允许你去管理它的状态,作为它从activity中添加和移除,也可以作为activity的生命周期状态的改变.例如,当activity的onPause()方法调用,任何fragment也接收 onPause()调用.

更多的关于fragment的生命周期和有效的回调方法,在 Fragments 开发指南


添加一个fragment到activity,使用XML


当fragment被重用,模块UI组件,每一个Fragment实例,必须与父类FragmentActivity关联.你可以通过定义每一个fragment到activity layout XML文件里,实现关联性.

这里一个layout文件例子,添加两个fragment到activity中,设备屏幕被指定为"large"(通过 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>

然后应用layout到你的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, 0, 0);
        setContentView(R.layout.news_articles, 0, 0);
    }
}

如果使用 v7 appcompat library,你的activity应该继承ActionBarActivity,它使FragmentActivity的子类(更多的信息,查阅 添加Action Bar)