Android App开发中创建Fragment组件的教程
作者:彭呈祥 发布时间:2022-05-18 04:34:38
你可以认为Fragment作为Activity的一个模块部分,有它自己的生命周期,获取它自己的事件,并且你可以在Activity运行的时候添加或者移除它(有点像你可以在不同的Activity中重用的一个”子Activity“)。这节课程讲述如何使用Support Library继承Fragment类,所以你的应用程序仍然是兼容运行的系统版本低于Android1.6的设备。
注意:如果你决定你的应用要求的最低的API级别是11或者更高,你不需要使用Support Library,反而能使用Frameword内的Fragment和相关API。要注意,这节课程主要讲使用Support Library的API,它使用特殊的包名,并且有些时候和包含在平台中版本API的名称略有不同。
在你开始这节课程之前,你必须配置你的Android项目使用Support Library。如果之前你没有使用过Support Library,遵照Support Library Setup文档,配置你的项目使用v4 Library。然而,你也能包含在你的Activity中Action Bar
创建Fragment
你可以把一个Fragment想象成一个Activity的模块区域,它有自己的生命周期,接收它自己的输入事件,并且你可以在Activity运行时添加和删除它(这有点像一个子Activity,你可以在不同的Activity中重用它们)。本节课向你介绍如何使用支持类库来扩展Fragment,以便让你的应用程序能够在像Android1.6那样的较旧版本上的兼容性。
注意:如果因为一些原因,你决定你的应用程序需要的API级别在11以上,那么你就不需要使用支持类库,并且可以使用框架内置的Fragment类和相关的API来代替。要注意的是本课的重点是使用支持类库中的API,它使用一个特殊的包签名,并且某些时候API的名称会比包含在平台内的版本有稍微的不同。
创建Fragment类
要创建一个Fragment,就要继承Fragment类,然后重写关键的生命周期方法,把你的应用程序逻辑插入其中,这跟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的onPause()方法被调用时,Activity中的任何Fragment也会接收到对onPause()方法的调用。
有关Fragment的生命周期和有效的回调方法,请看Fragments开发指南。
使用XML把一个Fragment添加到一个Activity中
Fragment是可复用的、模块化的UI组件,每个Fragment类的实例都必须跟一个父类是FragmentActivity的Activity相关联。通过在你的Activity布局XML文件内定义每个Fragment可以完成这种关联。
注意:FragmentActivity是一个支持类库中提供的特殊的Activity,它用于处理系统版本是API Level 11以前的Fragment。如果你使用的系统版本最低是API Level 11或更高,那么就就可以使用常规的Activity。
当屏幕被认为足够大时,下例布局文件就会把两个Fragment添加到一个Activity中(该文件被放在由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的方式把Fragment添加给Activity布局时,你不能在运行时删除该Fragment。如果你打算在用户交互期间切换Fragment,你就必须在Activity被首次启动时把Fragment添加到Activity中。


猜你喜欢
- resultMap标签继承、复用、嵌套记录演示 Mybatis 中 resultMap 标签继承、复用(包括跨文件)以及多层嵌套的使用方法,
- 本文实例讲述了java生成XML的方法。分享给大家供大家参考,具体如下:下拉框的生成,我是通过javascript读取xml文件生成的。Xm
- 配置文件<!-- 文件上传 --> <bean id="multipartResolver" clas
- 解法1: 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k)。解法2: 利用选择排序或交
- 记一次 Data Binding 在 library module 中遇到的大坑使用 Data Binding 也有半年多了,从最初的 se
- 本文实例为大家分享了用JavaMail发送HTML模板邮件的具体代码,供大家参考,具体内容如下依赖<dependency>&nb
- 1.委托delegate委托delegate也是一种类型,在任何可以声明类的地方都可以声明委托,它将方法当做另一个方法的参数进行传递,这样就
- 1、什么是阻塞队列?队列是一种数据结构,它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素。阻塞队里与普通的队列的区别在于,普
- 上一篇我们详解了setttings.xml的配置项,里面的配置项基本都和仓库有关系,我们使用maven更多的也是要从仓库下载jar包,然后也
- 第1部分 HashMap介绍HashMap简介HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap
- 本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDB
- 缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢?
- 介绍在 C/C++ 中,程序员负责对象的创建和销毁。通常程序员会忽略无用对象的销毁。由于这种疏忽,在某些时候,为了创建新对象,可能没有足够的
- 一、判断一个字符串str不为空的方法有:1、str == null;2、"".equals(str);3、str.len
- 一、 WillPopScope用法WillPopScope本质是一个widget用于拦截物理按键返回事件(Android的物理返回键和iOS
- webp格式图片webp格式图片是google推出的,相比jpg png有着巨大的优势,同样质量的图片webp格式的图片占用空间更小,在像电
- 之前介绍了SpringBoot集成Jpa的简单使用,接下来介绍一下使用Jpa连接数据库对数据进行排序、分页、条件查询和过滤操作。首先创建Sp
- 1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String n
- 背景由于项目是采用java编写的,微信包括微信支付大都是php相关,于是微信支付官方文档对java的支持就不是很友好,在网上找了很多文章,基
- 一般而言,Spring的依赖注入有三种:构造器注入、setter注入以及接口注入。本文主要讲构造器注入与setter注入。1、构造器注入为了