创建Fragment(Fragment二)
您可以将片段视为活动的模块化部分,它具有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同活动中重复使用)。本课程介绍如何使用支持库扩展Fragment
类,以便您的应用程序与运行系统版本低至Android 1.6的设备保持兼容。
您应该创建一个生命周期感知组件,而不是在Fragment
的生命周期方法中设置依赖组件。当Fragment
在其生命周期中移动时,该组件可以处理所需的任何设置或拆除。然后,可以在其他Fragments
和Activities
中重用生命周期感知组件,以避免代码重复,并减少在Fragments / Activities
本身中需要进行的设置。有关更多信息,请阅读使用生命周期感知组件处理生命周期。
在开始本课程之前,您必须设置Android项目以使用支持库。如果您之前未使用过支持库,请按照支持库设置文档将项目设置为使用v4库。但是,您也可以在活动中包含应用栏,而不是使用与Android 2.1(API级别7)兼容的v7 appcompat
库,还包括Fragment API
。
有关实现片段的更多信息,请参阅片段。您还可以通过浏览相关的示例应用了解更多信息。
一、创建Fragment类
要创建片段,请扩展Fragment
类,然后覆盖关键生命周期方法以插入应用程序逻辑,类似于使用Activity
类的方式。
创建Fragment
时的一个区别是您必须使用onCreateView()
回调来定义布局。 实际上,这是为了使片段运行所需的唯一回调。 例如,这是一个指定自己布局的简单片段:
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
的onPause()
方法时,活动中的任何片段也会接收对onPause()
的调用。
Fragments
开发人员指南中提供了有关片段生命周期和回调方法的更多信息。
二、使用XML将Fragment添加到Activity
虽然片段是可重用的,模块化UI组件,但Fragment类的每个实例都必须与父FragmentActivity相关联。 您可以通过定义活动布局XML文件中的每个片段来实现此关联。
注意:FragmentActivity是支持库中提供的一项特殊活动,用于处理早于API级别11的系统版本上的片段。如果您支持的最低系统版本是API级别11或更高级别,则可以使用常规活动。
下面是一个示例布局文件,当设备屏幕被视为“大”(由目录名中的大限定符指定)时,它会向活动添加两个片段。
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>
提示:有关为不同屏幕尺寸创建布局的更多信息,请阅读支持不同的屏幕尺寸。
然后将布局应用于您的活动:
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
库,那么您的活动应该扩展AppCompatActivity
,它是FragmentActivity
的子类。 有关更多信息,请阅读添加应用栏。
注意:通过在布局XML文件中定义片段将片段添加到活动布局时,无法在运行时删除片段。 如果您计划在用户交互期间将片段交换进出,则必须在活动首次启动时将片段添加到活动中,如下一课所示。