资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Android 官方开发教程中文版 维信科技使用 Fragment 创建动态 UI使用 Fragment 创建动态 UI在 Android 中创建动态、多栏的 UI,你需要将 UI 组件和 Activity 行为封装到模块中,以便在 Activity 中交换。你可以使用 Fragment 类创建这些模块,这种行为有点像一个可以自己定义布局和管理生命周期的嵌套 Activity(维信科技提供) 。当一个 Fragment 指定它自身的布局时,它能和 Activity 内的其它 Fragment配置成不同的组合以便为不同的屏幕大小修改你的布局结构(小屏幕一次可能只显示一个 Fragment,大屏幕则可以显示两个或更多) 。本课程展示了如何使用 Fragment 创建动态的用户体验以及为不同屏幕大小的设备优化 App 的用户体验,同时继续支持运行于低至 Android1.6 版本的设备。创建 Fragment你可以认为 Fragment 是 Activity 的一个模块化部分,它有自己的生命周期,有自己的输入事件,并且你还可以在 Activity 运行时添加或移除它(有点像可以在不同的 Activity 中重用的“子 Activity”) (维信科技提供) 。这节内容展示了如何使用支持库继承 Fragment,使你的 App 可以和运行低至 Android1.6 的设备保持兼容。注意 :如果你决定了 App 要求的最小 API 级别为 11 以上,你可以使用框架内建的 Fragment 类及相关的 API,而不需要使用支持库 (维信科技提供) 。只要知道这节课的重点在于使用支持库 API,它使用特定的包签名,并且某些 API 名称和平台包含的版本有点不同。在你开始课程之前,你必须设置你的 Android 项目使用支持库。如果你之前没有使用支持库,按“安装支持库 ”文档所说的把你的项目设为使用 v4 库,你也可以使用 v7 appcompat 库以便在 Activity 中包含操作栏,v7 兼容Android2.1(API 级别 7)并且也包含 Fragment API(维信科技提供) 。创建 Fragment 类要创建 Fragment,从 Fragment 类继承,重写关键的生命周期方法以插入App 的应用逻辑,就像你在 Activity 类做的一样。不同的是,创建 Fragment 时,你必须在 onCreateView()回调方法中定义布局。事实上,这是运行 Fragment 所需要的唯一回调方法。下例是一个指定自己布局的简单 Fragment:import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.ViewGroup;public class ArticleFragment extends Fragment Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) / 填 充 fragment 的 布 局return inflater.inflate(R.layout.article_view, container, false);就像 Activity 一样,Fragment 应该实现其它的生命周期回调方法,这样,当它在 Activity 中被添加或移除时,以及 Activity 本身在生命周期状态中切换时,允许你管理 Fragment 的状态(维信科技提供) 。例如, Activity 的 onPause()被调用时,Activity 中的所有 Fragment 也会收到 onPause()的调用。更多有关 Fragment 生命周期和回调方法的信息,请参考 Fragment 开发者指南。使用 XML 向 Activity 添加 FragmentFragment 是可重用的、模块化的 UI 组件,每个 Fragment 类的实例都必须关联一个父 FragmentActivity。你可以在 Activityr 的布局 XML 文件中定义每一个Fragment 来获取这种关联。注意 : FragmentActivityj 是一个支持库提供的特殊的 Activity,用来在低于API 级别 11 的系统版本中处理 Fragment(维信科技提供) 。如果你支持的最低系统版本高于 API 级别 11,你可以使用 Activity。这里是一个当设备屏幕为“大” (目录名使用了“large”修饰符)时,向Activity 添加两个 Fragment 的布局文件的示例:res/layout-large/news_articles.xml提示 :更多有关为不同屏幕大小创建布局的内容,参看 “支持不同屏幕大小 ”。在 Activity 中应用布局:import android.os.Bundle;import android.support.v4.app.FragmentActivity;public class MainActivity extends FragmentActivity Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.news_articles);如果你使用了 v7 appcompat 库,Activity 应该继承 ActionBarActivity,这是FragmentActivity 的一个子类(更多信息请参见“添加操作栏” ) 。注意 :当你通过在布局 XML 文件中的声明 Fragment 的方式向 Activity 布局添加 Fragment 时,你不能在运行时移除 Fragment。如果你打算在用户交互时交换 Fragment,你必须在 Activity 首次启动时添加 Fragment,这将在下一节演示。构建灵活的 UI当为较大范围的屏幕尺寸设计应用程序时,你可以基于屏幕所允许的空间,在不同的布局配置中重用 Fragment 以优化用户体验(维信科技提供) 。例如,在手机设备上为单面板用户界面一次只显示一个 Fragment,相反,在有较宽屏幕尺寸的平板上可以并排设置 Fragment 来为用户显示更多信息。FragmentManager 类提供方法允许你在运行时为 Activity 添加、移除以及替换 Fragment,从而创建动态用户体验(维信科技提供) 。在运行时向 Activity 添加 Fragment相比在布局文件中为 Activity 定义 Fragment就象上节课中演示的使用元素 你可以在 Activity 运行时添加 Fragment,如果你打算在两个 Fragment,用不同配置显示在不同屏幕尺寸上的同一个 Activity 中。在大屏幕上,两个 Fragment 并排显示,而在手机设备上,一次只显示一个 Fragment,必须在用户导航时用一个 Fragment 替换另一个。Activity 生存期内改变 Fragment,你必须这样做。要执行添加或移除 Fragment 的事务,你必须使用 FragmentManager 创建一个 FragTransaction,它提供了添加、移除、替换及执行其它 Fragment 事务的API。如果你的 Activity 允许移除或替换 Fragment,你应该在 onCreate()方法中添加初始化 Fragment 的代码(维信科技提供) 。在处理 Fragment(尤其是那些运行时添加的)时有一个重要的规则,在布局中必须有一个容器视图供这些 Fragment 布局驻留。下面的布局是一个替换在上节内容中出现的一次只显示一个 Fragment 的布局。为了用一个 Fragment 替换另一个, Activity 包含一个 FrameLayout 做为Fragment 的容器。注意文件名和上节内容中的布局文件名相同,但是目录名中没有“large”修饰符,因此这个布局用于设备屏幕比“large ”小,不能同时填充两个Fragment 的情况中。res/layout/news_articles.xml在 Activity 中插入代码,调用支持库 API 的 getSupportFragmentManager()方法获得 FragmentManager,然后调用 beginTransaction()创建FragmentTransaction,调用 add()方法添加 Fragment。你可以使用同一个 FragmentTransaction 执行多个 Fragment 事务,当你准备好要改变时,你必须调用 commit()方法。下面是如何向 Activity 中添加 Fragment 的例子:import android.os.Bundle;import android.support.v4.app.FragmentActivity;public class MainActivity extends FragmentActivity Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.news_articles);/ 检 查 Activity 正 在 使 用 的 包 含 Fragment 容 器 FrameLayout 的 布 局 版本if (findViewById(R.id.fragment_container) != null) / 如 果 我 们 是 从 较 早 的 状 态 中 恢 复/ 我 们 不 需 要 做 任 何 事 情 , 直 接 返 回/ 否 则 , 我 们 可 能 会 覆 盖 掉 已 经 存 在 的 Fragmentif (savedInstanceState != null) return;/ 创 建 放 在 Activity 中 的 新 Fragment HeadlinesFragment firstFragment = new HeadlinesFragment(); / 在 这 个 例 子 中 , Activity 是 被 Intent 对 象 的 特 殊 指 令 启 动 的 ,/ 把 Intent 的 extras 集 合 传 递 给 Fragment 做 为 参 数firstFragment.setArguments(getIntent().getExtras();/ 把 Fragment 添 加 到 容 器 FrameLayout 中getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();因为 Fragment 在运行时添加到 FrameLayout 容器中(替换在 Activity 布局文件中用元素定义的) ,Activity 可以移除它,并用另一个 Fragment替换它(维信科技提供) 。用一个 Fragment 替换另一个替换 Fragment 的过程就是简单的添加一个 Fragment,只不过是用 replace()方法代替 add()方法。请记住,当执行 Fragment 事务,如替换或删除 Fragment 时,它
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号