`
su1216
  • 浏览: 669025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
深入入门正则表达式(jav...
浏览量:71747
E60283d7-4822-3dfb-9de4-f2377e30189c
android手机的安全问...
浏览量:128506
社区版块
存档分类
最新评论

android Fragment开发文档翻译 - 1

阅读更多

由于本人英文能力实在有限,不足之初敬请谅解

本博客只要没有注明“转”,那么均为原创,转贴请注明链接

 

android Fragment开发文档翻译 - 1

android Fragment开发文档翻译 - 2

本系列并没有对原文100%翻译,也没有100%的贴出原文

 

Fragment也是android3.0(api level 11)新增的组件

public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListener

已知的直接子类有

DialogFragment, ListFragment, PreferenceFragment, WebViewFragment

 

Fragment紧密的绑定到它所在的Activity中,并且不能脱离其使用

尽管Fragment定义了它自己的声明周期,它也是依赖于它的activity的

如果activity is stopped,activity里面的fragments都不会被start,当activity is destroyed,所有的fragments也将destroyed

A Fragment is closely tied to the Activity it is in, and can not be used apart from one. Though Fragment defines its own lifecycle, that lifecycle is dependent on its activity: if the activity is stopped, no fragments inside of it can be started; when the activity is destroyed, all fragments will be destroyed

 

Fragment的所有子类必须包含一个public empty构造函数

当需要的时候,特别是在恢复state期间,framework会经常重新实例化一个fragment类,并且需要能找到这个构造器去实例化它

如果empty构造函数不可用,在一些恢复state的情况下会出现运行时异常

All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it. If the empty constructor is not available, a runtime exception will occur in some cases during state restore

 

 

从下边的图可以很清晰的看出fragment的生命周期


如果fragment在页面上有需要显示的部分,那么必须重写onCreateView(),并且返回一个View(fragment的layout的root)

如果没有需要显示的,当然也就不用理睬这个函数了

如果继承的是ListFargment,那么也不用重写onCreateView(),ListFargment已经重写过了

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

 

添加fragment到activity中(两种方式)

a.在activity的layout中声明,可以为fragment像View一样指定layout属性

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

android:name指定了实例化fragment所用到的类

 

 

b.在程序中添加fragment到ViewGroup

在你的activity运行的任何时候,你都可以添加fragment到你的activity的布局中,你只需指定一个ViewGroup来放置fragment即可

下面演示fragment的事务处理

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

 一旦使用FragmentTransaction改变了fragment,那么必须调用commit来是它生效

 

每个fragment都需要一个唯一标识,有三种方法指定唯一标识

1.android:id

2.android:tag

3.如果没有提供上面两个中任何一个,系统则使用他container view的ID作为标识

 

添加一个没有UI的fragment

在activity中使用add(Fragment, String)这样(使用一个唯一string的tag要比一个view id好)添加一个不带UI的fragment。这样可以添加fragment,但是因为它并没有与activity中layout的View关联,所以它不会收到onCreateView()的调用,所以也不需要实现这个方法。

为fragment提供一个字符串tag,并不严格局限于没有UI的fragment,你可以为带有UI的fragment提供一个字符串tag,但是如果fragment没有UI,那么字符串tag是唯一标识它的方式。如果之后你想从activity获得此fragment,你需要使用findFragmentByTag()

 

To add a fragment without a UI, add the fragment from the activity using add(Fragment, String) (supplying a unique string "tag" for the fragment, rather than a view ID). This adds the fragment, but, because it's not associated with a view in the activity layout, it does not receive a call to onCreateView(). So you don't need to implement that method.


Supplying a string tag for the fragment isn't strictly for non-UI fragments—you can also supply string tags to fragments that do have a UI—but if the fragment does not have a UI, then the string tag is the only way to identify it. If you want to get the fragment from the activity later, you need to use findFragmentByTag().

 

 

一个没有UI的fragment例子(之后的blog中会有api demos关于fragment的学习)

ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.java

 

管理fragment可以通过FragmentManager

在activity中可以通过getFragmentManager()获得FragmentManager

执行fragment事务可以通过FragmentTransaction

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

事务是你提交到activity的一个改变的集合,可以用FragmentTransaction中的api来执行

你也可以save每一个transaction到一个由activity管理的back stack中,允许用户向后导航fragment的改变(类似于向后导航activities)

 

在调用commit()之前,可是你也许想要调用addToBackStack(),把transaction添加到fragment的事务集的一个的back stack中
这个back stack是由activity管理的,并且允许用户按返回键返回到上一个fragment状态

 

一个例子演示了如何用一个fragment替换另一个fragment,并且在back stack中保存上一个状态

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

这个例子中,newFragment替换了当前在layout容器中通过ID:R.id.fragment_container标识的fragment
调用addToBackStack(),这个“替换”事务被保存到back stack中,所以用户可以回退这个事务并且通过按back键把上一个fragment带回来

 

 

If you add multiple changes to the transaction (such as another add() or remove()) and call addToBackStack(),
then all changes applied before you call commit() are added to the back stack as a single transaction and the Back button will reverse them all together.

如果你添加多项改变到事务中(例如另一个add或者remove)并且调用addToBackStack(),

那么在你调用commit()之前,所有被实施的改变作为一个单一的事务添加到back stack,Back键将会把他们一起回退

 

这里说一下顺序的问题

顺序并不在重要,但是:

必须在最后调用commit()

如果在同一个container中添加了多个fragments,添加的顺序决定了他们在view层级中显示的顺序

 

如果你在执行一个移除fragment操作的事务时不调用addToBackStack()。那么当这个transaction被提交后fragment会被销毁,并且用户不可能回退回去。
相反,如果当移除fragment时,你调用addToBackStack(),那么这个fragment会stopped,并且如果用户导航回去它会resumed

小提示:对于每一个fragment的事务,在commit()之前通过调用setTransition(),你可以使用一个过渡动画

 

调用commit()并不是马上就执行这次事务,恰恰相反,一旦activity的UI线程有能力去完成,FragmentTransaction就把这次提交列入计划到activity的UI线程运行

 

如果必要,不管怎样,你可以从你的UI线程调用executePendingTransactions()来通过commit()立即执行提交了的transaction。通常这样做并不是必须的,除非transaction是其他线程工作的依赖

警告:只有在activity之前(当用户离开这个activity时)你可以用commit()提交一个transaction保存他的状态
如果你尝试在这个时间点之后commit,将会收到一个异常。这是因为如果activity需要恢复,在commit之后的state可能会丢失。在你觉得可以丢失这次commit的情况下,可以使用commitAllowingStateLoss()

 

 

绝大部分来自对下面地址的翻译,英文水平实在有限,希望拍砖同时能给予指正。

http://developer.android.com/guide/topics/fundamentals/fragments.html

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

  • 大小: 72.8 KB
分享到:
评论

相关推荐

    android 中文开发文档

    Android官方提供的开发文档是英文为主,对于中文开发者来说,理解起来可能会有些困难。因此,"android 中文开发文档"的存在是为了弥补这一空缺,提供方便中文开发者阅读和学习的资料。这份文档可能是对原版Android...

    android-tech-docs, Android官方技术文档翻译.zip

    Android 技术文档翻译项目是开源...通过阅读和学习这个开源的Android技术文档翻译,开发者可以深入了解上述知识点,并提升自己的Android开发技能。同时,参与开源项目也是积累经验、贡献社区和提升职业发展的好方式。

    《宅男的android开发指南》(翻译)--3

    《宅男的Android开发指南》是一部面向...在这个翻译文档中,你可以期待找到关于这些主题的详细解释和实例,帮助你一步步走进Android开发的世界。记得结合实际操作来加深理解,理论与实践相结合是学习编程的最佳途径。

    Android中文翻译组_Android中文API合集(4).zip_android_android 翻译_android开发

    《Android中文API合集(4)》是由Android中文翻译组精心编译的一份重要资源,旨在为中国的Android开发者提供方便易懂的API参考文档。这个压缩包中的核心文件是"Android中文翻译组——Android中文API合集(4).chm",...

    Android官方API文档完整版

    Android官方API文档是开发者在构建Android应用程序时的重要参考资料,它详尽地涵盖了Android系统的各个方面,包括框架API、库、工具以及开发过程中的最佳实践。这个完整版的文档以CHM(Compiled HTML Help)格式提供...

    Android-为了彻底掌握Kotlin语法花了好几个月把官方文档翻译了一遍。

    本文将基于对Kotlin官方文档的深入理解和翻译,详细阐述Kotlin的关键语法和概念,帮助开发者快速上手并深入理解这门语言。 1. **基本语法** - **变量声明**:Kotlin支持`var`(可变)和`val`(不可变)变量,语法简洁...

    Android-API合集

    这个“Android中文翻译组——Android中文API合集(3).chm”文件很可能是对Android官方文档的部分翻译,对于中文开发者来说,这是一个宝贵的资源,可以帮助他们更好地理解和使用Android API。通过深入学习和实践,...

    Android中文翻译组—Android中文合集(7)

    《Android中文翻译组—Android中文合集(7)》是一个为中文用户提供的Android开发资源集合,更新至2012年1月22日,包含了当时最全面、最新的Android API中文版信息。这个合集主要以CHM(Microsoft Compiled ...

    Android应用源码讯飞语音测试源码-IT计算机-毕业设计.zip

    这篇文档将深入解析《Android应用源码讯飞语音测试源码》这个项目,它是一个针对Android平台的App开发示例,特别适用于毕业设计学习。在分析这个项目时,我们将涵盖以下几个核心知识点: 1. **Android应用程序开发...

    android开发中文API

    这个API文档翻译项目,如“AndroidBox0.5”所示,旨在为开发者提供一个更易于理解的中文环境,以便他们能更顺畅地掌握Android SDK中的各种类、方法和概念。 Android SDK(软件开发工具包)是Android应用开发的核心...

    android应用开发API

    Android中文翻译组——Android中文API合集(4)是中文社区为方便国内开发者阅读而翻译的资料,它包含了大量官方文档的翻译,使得理解API更为便捷。这个合集通常会包含多个版本的API翻译,确保开发者可以找到对应版本...

    android开发指南

    这篇指南将基于提供的文件名"Android中文翻译组——Android中文API合集(7).chm"和"Android中文翻译组——Android开发者指南(2).chm"来展开讨论,这两份资源涵盖了Android开发的关键知识点和实践建议。...

    android-15_r01.zip

    2. **Fragment改进**:对Fragment的管理和交互进行了优化,使得在不同屏幕尺寸设备上开发应用更加容易。 3. **USB主机模式**:支持USB设备作为主机,可以连接键盘、鼠标或其他USB设备。 四、性能优化 1. **GPU...

    Android中文翻译组——Android中文API合集(3).zip_android_手册

    《Android中文API合集(3)》是Android开发者的重要参考资料,由Android中文翻译组精心编译,旨在为中文用户提供方便、易懂的Android API文档。这个合集主要涵盖了Android开发中的各种关键知识点,包括但不限于组件...

    Android API中文版查询合集

    这个合集可能包括了Android各个版本的API文档,从早期的API Level 1一直到最新的API Level,覆盖了Android框架、UI组件、数据存储、网络通信、多媒体处理、硬件访问等多个方面。对于每个API,中文翻译会清晰地解释其...

    Android平台下最新开发的桌球游戏

    myeclipse using.doc可能是开发文档,介绍了如何在MyEclipse环境下使用某些特定功能,尽管MyEclipse主要用于Java EE开发,但其文档对于理解Android开发的一些通用概念可能会有帮助。至于YoudaoDict.exe,这是一款...

    Android 编程权威指南word版

    - **持续跟进最新技术**:Android平台不断更新迭代,定期关注官方文档和开发者的反馈信息,以便及时掌握新技术动态。 综上所述,《Android编程权威指南》是一本非常适合初学者入门和进阶的实战型教材。通过本书的...

    Android中文API合集chm

    《Android中文API合集》是Android开发者不可或缺的重要参考资料,它为中文环境下的开发工作提供了极大的便利。这份资源包含了丰富的Android API文档,对于深入理解和高效应用Android SDK至关重要。 Android API是...

    Android中文API查询

    在Android开发中,API查询通常依赖于官方的开发者文档,这个“Android中文API查询”资源可能是对官方文档的翻译或本地化,使得中文开发者能更方便地理解API的用法。常见的查询方式包括在线文档浏览、离线文档下载...

    Adroid中文翻译组——Android中文API合集

    1. **Activity**:Android应用程序的基本单元,负责用户界面的呈现和交互。理解Activity的生命周期和如何在不同状态之间转换是开发中的重要一环。 2. **Intent**:用于在组件间传递消息,是启动Activity或Service的...

Global site tag (gtag.js) - Google Analytics