Fragment和FragmentActivity的使用
可以分为下面的几部分:
使用支持库
创建一个Fragment
创建一个动态UI
多个Fragment之间的通信
1、使用支持库
如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容。
如果您的应用使用在3.0以下、1.6及以上的版本,需要使用支持库来构建。
使用支持库的步骤:
使用SDK下的SDK Manager工具下载Android Support Package
2. 在您的Android工程的顶级目录下创建一个libs目录
3. 找到您的SDK下的/extras/android/support/v4/android-support-v4.jar,并且拷贝到您的项目的libs下,选中这个jar包 → 右键 → Build Path → Add to Build Path
4.在您的项目的
Manifest.xml
文件的
<manifest>
标签下添加:
<
uses-sdk
android:minSdkVersion
=
"4"
android:targetSdkVersion="8"/>
其中
targetSdkVersion
是您的软件最小支持的版本
5.如果您的项目支持3.0以下的版本,请导入如下的包:android.support.v4.*;
在使用Fragment的Activity请继承FragmentActivity而不是Activity。如果您的系统是3.0或以上版本,同样需要导入类似的包,但是可以使用普通的Activity。
2、创建一个Fragment
Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。可以看做是一个子Activity。
创建一个Fragment
创建一个Fragment和创建一个Activity很类似,继承Fragment类,重写生命周期方法,主要的不同之处就是需要重写一个onCreateView()方法来返回这个Fragment的布局。例子:
Fragment的生命周期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。
更多的内容请参照类Fragment。
使用XML添加Fragment到Activity
尽管Fragment可以被多个Activity重用,但是您也必须把Fragment关联到一个FragmentActivity上。可以使用XML布局文件的方式来实现这种关联。
说明:上面的所说的FragmentActivity适用在API在3.0以下的版本,3.0及以上的版本可以使用普通的Activity。
例子:
上面使用fragment标签,android:name=””指定一个添加到xml中的Fragment。对于创建不同的屏幕尺寸布局的更多信息,请阅读支持不同的屏幕尺寸。
当您添加一个片段一个活动布局定义的布局XML文件中的片段,你不能删除在运行时的片段。如果您打算在用户交互和交换片段,你必须添加的活性片段的活动时第一次启动。
3、构建一个灵活的UI
FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的操作。
在Activity运行期间你可以添加Fragment而不是在XML布局文件中进行定义。如果你打算在Activity中改变Fragment的生命过程。
如果要执行添加、删除、修改的操作,你必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些操作。
添加一个Fragment到一个Activity,必须把这个Fragment添加到一个容器视图中。例子:
在Activity中你可以通过getFragmentManager()来获得Fragment对象,然后通过FragmentManager对象的beginFragmentTransaction()方法来获得FragmentTransaction对象。通过它的add()方法来添加一个Fragment到当前的Activity中。
一个FragmentTransaction对象可以执行多个增删修的方法,如果你想把这些修改提交到Activity上,必须在最后调用一下这个对象的commit()方法。例子:
由于不是定义在XML布局中的,所有可以转型删除和修改的操作。
如果替换或者删除一个Fragment然后让用户可以导航到上一个Fragment,你必须在调用commit()方法之前调用addToBackStack()方法添加到回退栈。如果你把这个Fragment添加到了回退栈,在提交之后这个Fragment是会被Stop而不是Destroyed。如果用户导航到这个Fragment,这个Fragment会被Restart而不是重新创建。如果你没有把它添加到回退栈,则在删除或者替换的时候它将被Destroyed。例子:
4、与其他Fragment的交互
两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
为了实现两个Fragment的交互,您可以在Fragment中定义一个接口,然后再这个接口中定义一个方法,在Fragment的onAttach()方法中调用这个接口中的方法。然后让Activity实现这个方法来完成Activity和Fragment之间的通信。例子:
定义接口并调用方法:
实现接口,在这个方法中可以进行与其他Fragment的数据的交互:
可以通过FragmentManager的findFragmentById()来查找一个Fragment。
下面讲讲为啥要用Fragment:
首先,Fragment可以兼容手机和平板,最大减少针对不同平台的工作量。
其次,Fragment可以向下兼容(通过android官方的Support Package),在2.x平台上没有任何问题。
最重要的是,Fragment实质上是一种可以包含控制代码的视图模块,可以非常方便的进行组合。
[另外,如果大家现在去看TabActivity的官方文档,会发现此类已被标记为deprecated,建议使用Fragment代替]
废话少说,给大家展示两个项目,都是github上面开源的。
1.水平分页指示器,google+中有用到这种效果,现已成为android4.0标配。
这个项目只是实现了分页指示。谷歌的Support Package自己内置了一套水平滑动的方案,非常实用,基于Fragment实现。
2.给大家一个完整的使用Fragment的项目案例。
这个项目做的好像是一个电视节目提醒之类的东西,运行截图如下:
下面附上这两个开源项目的地址:
1.水平分页指示器 https://github.com/tisa007/Android-ViewPagerIndicator/zipball/master
2.使用Fragment的项目案例 https://github.com/UweTrottmann/SeriesGuide
转自:http://blog.csdn.net/jdsjlzx/article/details/7678171
Fragment和FragmentActivity的使用的更多相关文章
- Fragment与FragmentActivity的关系
前阵用viewpaper+fragment做滑动引导,查阅了下网上的资料,发现在有两种做法,一个是自建类直接继承Activity另一种是继承FragmentActivity,很是迷惑,在查了些goog ...
- Fragment 和 FragmentActivity的使用
Fragment 和 FragmentActivity的使用 http://blog.csdn.net/izy0001989624/article/details/17072211
- Fragment与FragmentActivity通信封装
在项目里面会经常用到Fragment与FragmentActivity,比如Fragment之间的界面切换与Fragment之间的值传递等等,为了方便起见我把Fragment和FragmentActi ...
- 转 Fragment 和 FragmentActivity的使用
今天学习下 Android中的 Fragment 和 FragmentActivity,因为没有4.0手机,平台是2.3.3 所以我是使用 v4 support 包来进行学习. 要想用Fragment ...
- Fragment和FragmentActivity的使用方法
认识:首先我们知道Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容.模块化这些UI面板以便提供给其他Acitivity使用便利.同时我们显示的Fragment也会受到当前 ...
- ☆ fragment和fragmentactivity解析 (转)
一.为什么要使用Fragment 1.当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一 个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单 ...
- Fragment 和 FragmentActivity的使用(二)
今天继续完成剩下的学习部分,现在项目很多地方使用viewpager来提供滑动,今天记录学习viewpager配合fragment的显示,增加一个CallLogsFragment配合之前SMSLis ...
- android Fragment和FragmentActivity
MainActivity.java import android.app.AlertDialog; import android.app.Notification; import android.co ...
- Android Fragment和FragmentActivity区别和用法
Android Fragment是Android4.0以上才有的:而FragmentActivity是为了兼容4.0以下版本的Fragment使用的. 所以如果你想兼容4.0以下Android版本使用 ...
- fragment和fragmentactivity解析
一.为什么要使用Fragment 1.当我们须要动态的多界面切换的时候,就须要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个 ...
随机推荐
- java中的char类型所占空间
java中统一使用unicode编码,所以每个字符都是2个字节16位.unicode包括中文,所以对String类计算长度的时候,一个中文和一个英文都是一个长度.String voice = &quo ...
- redis之linux下的安装
安装 1.在/usr/local下新建redis文件夹 #mkdir redis 2.去redis.io下载redis安装包 # wget http://download.redis.io/relea ...
- Ceph中的容量计算与管理
转自:https://www.ustack.com/blog/ceph%ef%bc%8drongliang/ 在部署完Ceph集群之后,一般地我们可以通过Ceph df这个命令来查看集群的容量状态,但 ...
- 【scala】Option类型
一般来说,对于每种语言都会有一个关键字来表示一个对象引用的“无”.在Java中使用的是null. 而Scala则融合了函数式编程的风格,当预计到变量或者函数返回值可能不会引用任何值的时候,使用Opti ...
- 【scala】迭代器
如何访问集合呢?我们首先想到的是使用for循环来访问,还有一种方法是通过迭代器来访问. 在Scala中,迭代器(Iterator)不是一个集合,但是,提供了访问集合的一种方法. 迭代器包含两个基本的操 ...
- 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F】等式(因子个数)
题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均为正整数) 输入描述: 在第一行输入一个正整数T.接下来有T行,每行输入一个正整数n,请求出符合该方程要求的 ...
- Intent Flag启动模式P203
Activity启动模式:点此查看 Intent intent = new Intent(); /** * Intent.FLAG_ACTIVITY_NEW_TASK * 使用一个新的Task来启动一 ...
- Node大文件处理
之前有个需求要将文件解析再处理,当时直接将整个文件内容读到内存中然后解析,也是没有考虑到大文件的问题,那么要如何解析大文件呢? 输入:文件的内容是多个json,按顺序排列 输出:解析后的json数据 ...
- python基础之面向对象(二)
面向对象对程序设计OOD 找对象---->找类(归纳对象相同的特征与技能,还有没和对象独有的特征)面向对象编程OOP 先定义类---->实例化出对象查看成绩,交作业 在python3中,所 ...
- Java(Android)线程池妙用
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...