Fragment和FragmentActivity的使用方法
认识:首先我们知道Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容。模块化这些UI面板以便提供给其他Acitivity使用便利。同时我们显示的Fragment也会受到当前的这个Acitivity生命周期影响。(而平常的Fragment有其自己的生命周期)
一、使用方法:
1、创建一个或者多个你需要的Fragment类,其实就是类似activity一样,也有OnCreate()等回调函数。
2、如果要让当前的程序也就是Activity使用Fragment的话,需要把Acitivity中相关的回调函数内容搬过去。you might simply move code from your activity's callback methods into the respective callback methods of your fragment
一般地,我们需要以下回调函数:
onCreate()
onCreateView()
onPause()
除了以上3个我们基本上都要用到的回调函数方法,那么我们写得Fragment中还有其他: Handling the Fragment Lifecycle
二、关于继承Fragment类
除了基本的Fragment类,我们还可以继承的有:
DialogFragment
ListFragment
PreferenceFragment
三、添加用户界面
我们再 onCreateView() 里面处理我们的Fragment要显示的界面,返回的是一个View,这个View其实就是我们定义这个Fragment的Layout的root项(最外的、最大的那个哦!)。
从XML布局中生成View我们用LayoutInflater这个助手类提供的方法。
文解决我这两天的问题,故转载:原文Android
Tabhost with FragmentActivity
2012-05-07 更新)接續Android TabHost中切換Activity記錄了使用ActivityGroup達到在TabHost中切換Activity的方法,也在Android
Screen Orientation Event螢幕方向處理+Acitivity Liftcycle記錄了當螢幕方向改變時的處理,這篇小蛙繼續記錄用FragmentActivity取代ActivityGroup,透過FragmentActivity內建的BackStack來管理倒退歷程。
MainTabActivity.java : 主要的Tabhost Activity。
- public class MainTabActivity extends Activity {
- private TabHost mHost;
- // 在Activity中使用Tabhost必須要有LocalActivityManager物件來設定
- LocalActivityManager lam;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // main layout採用預設的Tabhost
- mHost = (TabHost) findViewById(android.R.id.tabhost);
- lam = new LocalActivityManager(MainTabActivity.this, false);
- lam.dispatchCreate(savedInstanceState);
- mHost.setup(lam);
- mHost.addTab(mHost.newTabSpec("Tab1").setIndicator("Tab1").setContent(new Intent(MainTabActivity.this, FragmentActivity1.class)));
- mHost.addTab(mHost.newTabSpec("Tab2").setIndicator("Tab2").setContent(new Intent(MainTabActivity.this, FragmentActivity2.class)));
- }
- @Override
- protected void onPause() {
- // 漏掉這行一定出錯
- lam.dispatchPause(isFinishing());
- super.onPause();
- }
- @Override
- protected void onResume() {
- // 漏掉這行一定出錯
- lam.dispatchResume();
- super.onResume();
- }
- }
FragmentActivity1.java : 第一個Tab中用來管理Fragment的FragmentActivity。(2012-05-07更新)經由Jay留言後,小蛙詳細測了一下,發現FragmentActivity主畫面中的Button是沒辦法消失的(因為FragmentActivity的目的關係),因此改成這樣,讓FragmentActivity純粹當成容器,主要的內容還是以Fragment為主。(這個方法不是唯一,但是一個可行的方法,應該也有更好的做法!)
- public class FragmentActivity1 extends FragmentActivity {
- public static FragmentManager fm;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.fragment_activity_1);
- fm = getSupportFragmentManager();
- // 只當容器,主要內容已Fragment呈現
- initFragment(new Fragment1());
- }
- // 切換Fragment
- public static void changeFragment(Fragment f){
- changeFragment(f, false);
- }
- // 初始化Fragment(FragmentActivity中呼叫)
- public static void initFragment(Fragment f){
- changeFragment(f, true);
- }
- private static void changeFragment(Fragment f, boolean init){
- FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.simple_fragment, f);
- if(!init)
- ft.addToBackStack(null);
- ft.commit();
- }
- }
Fragment1.java : 真正使用到的Fragment。
- public class Fragment1 extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.fragment_1, container, false);
- Button tv = (Button)v.findViewById(R.id.button2);
- tv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // 直接呼叫FragmentActivity1的靜態方法來做切換
- FragmentActivity1.changeFragment(new Fragment2());
- }
- });
- return v;
- }
- }
fragment_acitivity_1.xml : FragmentActivity layout。(2012-05-07修改) FragmentActivity只用來當容器,而不真正呈現內容(僅把Fragment內容載入)。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:id="@+id/simple_fragment">
- </LinearLayout>
fragment1.xml:Fragment layout,FragmentActivity載入的真正內容。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <Button
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button" />
- </LinearLayout>
最後別忘了在AndroidManifest.xml中加入android:configChanges="orientation"設定。這樣就成功的使用在Activity中使用Tabhost並且透過FragmentActivity來管理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
Fragment和FragmentActivity的使用方法的更多相关文章
- ☆ fragment和fragmentactivity解析 (转)
一.为什么要使用Fragment 1.当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一 个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单 ...
- Fragment与FragmentActivity通信封装
在项目里面会经常用到Fragment与FragmentActivity,比如Fragment之间的界面切换与Fragment之间的值传递等等,为了方便起见我把Fragment和FragmentActi ...
- 转 Fragment 和 FragmentActivity的使用
今天学习下 Android中的 Fragment 和 FragmentActivity,因为没有4.0手机,平台是2.3.3 所以我是使用 v4 support 包来进行学习. 要想用Fragment ...
- fragment和fragmentactivity解析
一.为什么要使用Fragment 1.当我们须要动态的多界面切换的时候,就须要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个 ...
- Fragment与FragmentActivity的关系
前阵用viewpaper+fragment做滑动引导,查阅了下网上的资料,发现在有两种做法,一个是自建类直接继承Activity另一种是继承FragmentActivity,很是迷惑,在查了些goog ...
- Fragment 和 FragmentActivity的使用
Fragment 和 FragmentActivity的使用 http://blog.csdn.net/izy0001989624/article/details/17072211
- FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;
FragmentTabHost这个控件每次切换Fragment,都会走Fragment的onCreateView和onDestroyView方法,多以每次切换都会创建和销毁Fragment实例,先来看 ...
- Fragment 和 FragmentActivity的使用(二)
今天继续完成剩下的学习部分,现在项目很多地方使用viewpager来提供滑动,今天记录学习viewpager配合fragment的显示,增加一个CallLogsFragment配合之前SMSLis ...
- Fragment和FragmentActivity的使用
可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 1.使用支持库 如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容. 如果您的 ...
随机推荐
- (DIjsktra算法) nyoj1401-一场说走就走的旅行
题目描述: 有一天,孩子回来对我说:“妈妈,听说马尔代夫很不错,放假了我想去玩.”马尔代夫?我也想去!没有人不向往一场说走就走的旅行!“其实我想去的地方很多,呼伦贝尔大草原.玉龙雪山.布达拉宫.艾菲尔 ...
- php的扩展配置
第一步:在php的安装目录下找到php.ini-development这个文件,并复制一个副本,修改这个副本的文件名为:php.ini 如下图我的目录为: 第二步:打开这个php.ini,修改 将这里 ...
- Idea使用Maven创建Java Web项目
最近学到了Java Web项目,使用Idea和Maven创建Java Web的时候遇到了诸多问题,最多的还是404问题.现在记录一下解决方案. 一.使用maven创建一个web项目,这一步网上都有,下 ...
- cmd 开启热点
开启热点,需要先打开Wifi,ssid 为 WiFi 名称,key 为密码 netsh wlan set hostednetwork mode=allow ssid=123 key=12345678 ...
- Spring+Mybatis+SpringMVC+Atomikos多数据源共存+不同数据库事物一致性处理
网上找了一大堆的例子,没一个跑通的,都是copy转发,哎,整理得好辛苦..做个笔记,方便正遇到此问题的猿们能够得到帮助....废话不多说,贴代码..... 项目结构说明: 1.dao层的admin.w ...
- centos 6.5 ruby环境安装
redis3.0以上支持集群,自带集群管理工具redis-trib.rb:在搭建集群前,安装ruby环境 ruby安装包下载 安装开发工具 1.命令:yum groupinstall "De ...
- gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法
➜ test_sqlite3 gcc *.c -I . -o xixi -pthread /tmp/cckGKTrr.o: In function `unixDlOpen': sqli ...
- POJ - 2057 The Lost House(树形DP+贪心)
https://vjudge.net/problem/POJ-2057 题意 有一只蜗牛爬上某个树枝末睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面,.现在这只蜗牛要求寻找 ...
- Spark源码剖析 - 计算引擎
本章导读 RDD作为Spark对各种数据计算模型的统一抽象,被用于迭代计算过程以及任务输出结果的缓存读写.在所有MapReduce框架中,shuffle是连接map任务和reduce任务的桥梁.map ...
- 利用C#访问注册表获取软件的安装路径
文章地址:https://blog.csdn.net/yl2isoft/article/details/17332139