【Android Developers Training】 20. 创建一个Fragment
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。
原文链接:http://developer.android.com/training/basics/fragments/creating.html
你可以把一个fragment看成是一个activity的模块,有着自己的生命周期,接收自己的时间输入,你可以在activity的运行阶段添加或者移除fragment(某种意义上说,像是你可以在不同activity中重用的子activity)。这堂课将会展示如何通过使用Support Library来继承Fragment类,这样一来,你的应用就能与Android 1.6及以上的设备兼容了。
Note:
如果你决定你的应用仅支持API Level 11及以上的系统,那么你无需使用Support Library,可以使用框架中内置的Fragment类和与它相关的APIs。不过要注意这堂课关注的是使用Support Library中提供的API,它和平台中内置的Fragment类相比,区别在于两者的包签名不同,有时候还有一些接口名字上的差异。
在你开始学习这节课之前,你必须合理配置你的Android项目来使用Support Library。如果在此之前你没有使用过Support Library,那么按照Support Library Setup这一文档的步骤,配置你的项目来使用v4库。然而,你也可以使用“v7应用兼容库(v7 appcompatlibrary)”使你的activities包含action bar,此时你的应用将兼容Android 2.1(API Level 7)及以上的系统,同时也包含了Fragment的APIs。
一). 创建一个Fragment类
为了创建一个fragment,继承Fragment类,之后覆写核心生命周期函数来插入你的应用逻辑,这和你处理Activity类的方法很相似。
当创建一个Fragment时,有一点不同的地方是:你必须使用onCreateView()回调函数来定义它的布局。事实上,这是唯一一个为了使一个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()方法。
可以阅读Fragments获取更多关于fragment生命周期和回调函数的知识。
二). 使用XML将Fragment添加至一个Activity
尽管fragments是可重用、模块化的UI组件,每个fragment的实例必须和一个父FragmentActivity关联。你可以通过在activity的XML布局文件中定义每一个fragment来实现这种关联。
Note:
FragmentActivity是一个由Support Library提供的特殊activity,用来处理早于API Level 11系统中的fragment。如果你所支持的系统版本高于API Level 11,那么你可以直接用常规的Activity。
下面是一个布局文件的例子,它向一个activity添加了两个fragment,前提是设备屏幕可认为是“大(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>
Tip:
关于更多为不同屏幕尺寸创建布局的知识,可以阅读:Supporting Different Screen Sizes。
之后将布局应用到你的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的子类。更多信息可以阅读:Adding the Action Bar(博客链接:http://www.cnblogs.com/jdneo/p/3440367.html)。
Note:
当你通过将fragment在XML布局文件中定义的方式把fragment添加到activity中,你不能再运行时移除这个fragment。如果你计划在用户交互过程中可以吧fragment换入或换出,你必须在activity第一次启动的时候把这个fragment添加到activity中,这是下节课将会展示的内容。
【Android Developers Training】 20. 创建一个Fragment的更多相关文章
- 【Android Developers Training】 19. 序言:通过Fragments构建动态UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 21. 创建一个可变动的UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 1. 创建一个Android项目工程
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 95. 创建一个同步适配器
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 93. 创建一个空验证器
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 18. 重新创建一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 106. 创建并检测地理围栏
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 76. 用Wi-Fi创建P2P连接
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- git使用命令总结
直接安装git.exegit -- version 查看当前git版本进入要创建库的文件夹 shift+右键 弹出 powerShell 弹出命令窗口 git init 初始化git管理仓库 出现一个 ...
- 使用crontab,让linux定时执行shell脚本
阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. 编辑crontab文件 4. 流程举例 5. 几个例子 Linux中,周期执行的任务一般由cron这个守护进程来处理. ...
- RabbitMQ 3.6.1集群搭建
MQ的集群首先需要搭建erlang集群1.把cat /root/.erlang.cookie 内容改为一致 cat /root/.erlang.cookie 2.更改cookie文件权限 chmod ...
- .net 企业管理系统快熟搭建框架
简言 本人在博客园注册也2年多了,一直没有写自己的博客,因为才疏学浅一直跟着园子里的大哥们学习这.net技术.一年之前跳槽到现在的公司工作,由于公司没有自己一套的开发框架,每次都要重新 ...
- Java Primitives and Bits
Integer when processors were 16 bit, an int was 2 bytes. Nowadays, it's most often 4 bytes on a 32 b ...
- haproxy-代码阅读-内存管理
haproxy内存池概述 内存池按照类型分类,每个类型的内存池都有一个名字,用链表记录空闲的内存块,每个内存块大小相等,并按照16字节对齐. haporxy用pool_head 结构记录内存池 str ...
- 01 json环境搭建
1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...
- 玩转Storage Table 的PartitionKey,RowKey设计
参阅的文章 l https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/designing-a-scalable ...
- Windows 修改电脑属性(一)
修改电脑属性里的注册信息 修改电脑属性的注册信息 运行注册表的方法:开始→运行→regedit→确定 1.CPU型号可以注册表编辑器中定位到下面的位置: HKEY_LOCAL_MACHINE\HARD ...
- Java IO流之内存流
内存流 1)内存流主要用来操作内存 2)分类 ByteArrayInputStream 主要完成将内容从内存读入程序之中 ByteArrayOutputStream 主要是将数据写入到内存中. 3)输 ...