Android App组件之Fragment说明和示例
Android App组件之Fragment说明和示例
1 Fragement介绍
Android从3.0开始引入Fragment,主要是为了支持更动态更灵活的界面设计。
Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面,你也可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。
需要注意的是:Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。
2 Fragment生命周期

3 Fragment实现方法
一般情况下,fragment把它的layout作为activitiy的loyout的一部分合并到activity中,有两种方法将一个fragment添加到activity中。
方法1:在activity的layout.xml文件中声明fragment
下面以一个应用实例来说明方法1。应用实例要求:创建一个activity,activity中包含Fragment。
layout文件fragment_layout_test.xml的代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <fragment android:name="com.skywang.app.FragmentLayoutTest$ExampleFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"/> </LinearLayout>
说明:
(01) 该layout仅仅只包含了一个fragment元素。
(02) fragment的属性 android:name="com.skywang.app.FragmentLayoutTest$ExampleFragment" 。意思是该layout包含一个fragment,这个fragment是定义在包名为"com.skywang.app"中类"FragmentLayoutTest""的内部类"ExampleFragment"中的。
FragmentLayoutTest.java的代码如下:
package com.skywang.app; import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.TextView;
import android.app.Fragment; public class FragmentLayoutTest extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// fragment_layout_test只包括ExampleFragment对象。
setContentView(R.layout.fragment_layout_test);
} // 继承与Fragment
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { return inflater.inflate(R.layout.example_fragment, container, false);
}
}
}
说明:
(01) FragmentLayoutTest通过 setContentView(R.layout.fragment_layout_test) 来调用fragment_layout_test.xml来作为布局文件。
(02) 而上面的fragment_layout_test.xml布局文件仅仅值包括1个Fragment,该Fragment是通过ExampleFragment实现的。
(03) ExampleFragment继承于Fragment,在onCreateView()方法中通过 return inflater.inflate(R.layout.example_fragment, container, false); 来将example_fragment.xml作为其布局文件。
所以,相当于FragmentLayoutTest直接调用example_fragment.xml来显示。那为什么要费这么大劲,非要用到Fragment呢?原因是因为Fragment的可扩展性,它能作为一个独立的显示单元添加到activity中。本文仅仅只是为了说明fragment的layout实现方法;实际应用中,可能比这复杂很多。
layout文件example_fragment.xml的代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:text="@string/example_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </LinearLayout>
说明:
(01) 采用LinearLayout线性布局,仅仅显示一个TextView。
点击下载:源代码
效果图:

方法2:在activity的layout.xml文件中声明包含
下面以一个应用实例来说明方法1。应用实例要求:创建一个activity,activity中包含一个Fragment,该Fragment采用动态加载的方式。
FragmentTransactionTest的代码:
package com.skywang.app; import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction; public class FragmentTransactionTest extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_transaction_test); // 获取FragmentManager
FragmentManager fragmentManager = getFragmentManager();
// 获取FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 获取ExampleFragment
ExampleFragment fragment = new ExampleFragment();
// 将fragment添加到容器about_fragment_container中
fragmentTransaction.add(R.id.about_fragment_container, fragment);
fragmentTransaction.commit();
} // 继承与Fragment
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { return inflater.inflate(R.layout.example_fragment, container, false);
}
}
}
说明:
(01) 在onCreate()中该activit调用fragment_transaction_test作为其布局文件。
(02) 在onCreate()中,通过获取FragmentManager和FragmentTransaction,来将ExampleFragment对象添加到R.id.about_fragment_container中,about_fragment_container是一个Fragment。
(03) ExampleFragment的onCreateView()中,将example_fragment作为其布局文件。
fragment_transaction_test.xml的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <FrameLayout
android:id="@+id/about_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/> </LinearLayout>
example_fragment.xml的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:text="Hello Fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </LinearLayout>
点击下载:源代码
效果图:

Android App组件之Fragment说明和示例的更多相关文章
- Android App组件之ListFragment -- 说明和示例
Android App组件之ListFragment -- 说明和示例 1 ListFragement介绍 ListFragment继承于Fragment.因此它具有Fragment的特性,能够作为a ...
- Android App组件之ListFragment -- 说明和示例(转载)
转自:http://www.cnblogs.com/skywang12345/p/3160260.html 1 ListFragement介绍 ListFragment继承于Fragment.因此它具 ...
- Android App组件之Activity
Android App组件之Activity 1 activit介绍 Activities 是Android的四大组件之一,其余三大组件是service.broadcast和content provi ...
- Android APP架构设计——MVP的使用示例
0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...
- Android做法说明(3)---Fragment使用app袋或v4包解析
Android做法说明(3)---Fragment使用app袋或v4包解析 1)问题简述 相信非常多的朋友在调用Fragment都会遇到以下的情况: watermark/2/text/aHR0cDov ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南
面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本. ...
- android.support.v4.app.Fragment和android.app.Fragment区别
1.最低支持版本不同 android.app.Fragment 兼容的最低版本是android:minSdkVersion="11" 即3.0版 android.support.v ...
- android四大组件学习总结以及各个组件示例(2)
上篇博文讲解了activity.content provider,此篇博文来仔细总结service.broadcast receiver: 3. Service >什么是服务?>windo ...
随机推荐
- C#使用redis学习笔记
1.官网:http://redis.io/(英) http://www.redis.cn/(中) 2.下载:https://github.com/dmajkic/redis/downloads(Wi ...
- 在 Ubuntu13.10 服务器中安装 Munin(监视工具)【转】
Munin 监测工具可检测所有的计算机,并记录好看到的计算机.通过图形Web界面的的方式显示所有信息.重点是即插即用的功能.完成安装后,大量的控插件会被打. 使用 Munin 您可以轻松地监视您的计算 ...
- git命令之git stash 暂存临时代码
git stash — 暂存临时代码 stash命令可以很好的解决这样的问题.当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用’Git stash’就可以将你当前未提交到 ...
- 【BZOJ2059】Buying Feed 购买饲料
题面 约翰开车来到镇上,他要带V吨饲料回家.如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元.约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi, ...
- CI框架+Umeditor上传图片配置信息
Umeditor提供了一个上传文件通用的类Uploader.class.php, 首先将Uploader.class.php类放入CI框架的libraries目录下更名为Myuploader.php然 ...
- ElastAlert告警
ElastAlert告警 https://blog.csdn.net/qq_38369069/article/details/80842432
- Mysql报Cannot load from mysql.proc. The table is probably corrupted
1548-Cannot load from mysql.proc. The table is probably corrupted http://bugs.mysql.com/bug.php?id=5 ...
- linux convert mp3 to wav and opus to wav
link : https://www.cyberciti.biz/faq/convert-mp3-files-to-wav-files-in-linux/ Install mpg321 or mpg ...
- shell中信号处理
参考: Shell 脚本中信号处理实践 Linux Shell 的信号 trap 功能你必须知道的细节 在 unix 里,可能发生的每一种类型的事件都是由一个独立的信号来描述,每一个信号都是一个小 ...
- python程序后台运行的实现
后台运行work()方法. work.py # -*- coding:utf-8 -*- def work(): print "running" import time time. ...