【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 ...
随机推荐
- linux服务器对外打包处理
案例描述 服务器遇到大流量攻击的处理过程.早上接到 IDC 的电话,说我们的一个网段 IP 不停的向外发包,应该是被攻击了,具体哪个 IP不知道,让我们检查一下. 按理分析及解决办法 首先我们要先确定 ...
- 栈的Java简单实现
关于栈 栈(Stack)是限定只能在一段进行插入和删除操作的线性表. 进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom). 栈的插入操作称为“入栈”(push),栈的删 ...
- NancyFx 2.0的开源框架的使用-Stateless
同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...
- 如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)
写在前面: 先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The re ...
- Spring切面通知执行的顺序(Advice Order)
问题描述 如果在Spring的程序中同时定义了环绕通知(Around)和前置通知(Before)..那么,有以下问题: 1.怎么让两个切面通知都起作用 2.或者让两者切面按自己指定的顺序进行执行? 3 ...
- 利用shell脚本监控目录内文件改动
#! /bin/bash webroot="/home/www/" cp /dev/null rsync_file if [ ! -f file.md5 ];then ...
- Struts2入门(一)
今天学习Struts2首先struts是一个成熟的框架.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Cont ...
- HttpClien Get&Post
新公司上班第二周,开始进军.Net Core,这方面的东西比较新,所以已经封装好的东西比较少,比如HttpClien之类的开源类库,找了NuGet好久,没有找到,所以先写个简陋的来用着先. 引用: u ...
- Linux网络服务01——Linux网络基础设置
Linux网络服务01--Linux网络基础设置 一.查看及测试网络 1.使用ifconfig命令查看网络接口 (1)查看活动的网络接口 ifconfig命令 [root@crushlinux ~]# ...
- Akka(5): ConsistentHashing Router - 可选定Routee的任务分配模式
上一篇讨论里我们介绍了几种任务分配(Routing)模式.Akka提供的几种现成智能化Routing模式大多数是通过对用户屏蔽具体的运算Routee选择方式来简化Router使用,提高智能程度,所以我 ...