你可以把fragment当作activity中的一个活动模块,它有自己的生命周期,自己接收输入消息,可以在activity运行的时候添加和删除(就像可以在其他activity中重用的"子activity")。这里会讲述如何用Support Library来扩展Fragment类这样app可以在老版本的系统上运行,就算是Android1.6。

注意:如果你因为什么原因把最低API level调整为11或者更高,你就不需要使用Support Library了,可以直接使用Fragment类只待的framework和相关API。只是要意识到这里将要介绍的是使用Support Library中的API,Support Library使用了特殊的包签名并且有时候会和平台API的名字有点小差别。

创建一个Fragment类

如果要创建一个fragment, 首先要扩展Fragment类,然后重写主要的生命周期方法来插入你的app逻辑,和在Activity类中的方法相似。

创建Fragment有一点不同是你必须使用onCreateView()方法来定义布局。事实上,这是你需要的唯一一个回调方法让fragment运行。例如,这里有一个简单的例子,它定义了自己的布局:

 import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup; public class ArticleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.article_view, container, false);
}
}

和activity一样,fragment也应该实现其他的生命周期回调方法来让你可以管理它的状态,当它从activity中添加删除或者在生命周期不同状态间切换时。例如,当activity的onPause()方法被调用后,activity中所有的fragment都会受到onPause()调用。

更多关于fragment生命周期和回调方法的信息,参考Fragment开发。

用XML在activity中添加Fragment

fragment是可重用的,模块化的UI组件,每一个Fragment类实例都必须和一个FragmentActivity相关。你通过在activity的XML文件中定义每个fragment来完成这个关联。

注意:FragmentActivity是一个Support Library提供的在系统版本比APIlevel11更老的版本中处理fragments的特殊的activity。如果你支持的API版本是11或者更高,那么直接使用正常的Activity。

这里是一个例子布局文件,它在设备屏幕是"large"时向activity中添加了两个fragment(文件夹名中有large标识)。

res/layout-large/news_articles.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> <fragment android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" /> <fragment android:name="com.example.android.fragments.ArticleFragment"
android:id="@+id/article_fragment"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" /> </LinearLayout>

提示:更多关于为不同屏幕大小提供布局的信息,查看Supporting Different Screen Sizes

下面识activity如何使用这个布局:

 import android.os.Bundle;
import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}

注意:当通过在xml文件定义fragment来加入到activity中时,你不能在runtime移出fragment。如果计划在用户交户时添加删除fragment,应该在activity第一次启动时加入fragment,下一篇会介绍。

上一篇:Android - 用Fragments实现动态UI - 使用Android Support Library

下一篇:Android - 用Fragments实现动态UI - 创建灵活的UI

最新文章

  1. java-正则表达式过滤字符串中的html标签
  2. struts_24_基于XML校验的规则、特点
  3. IOS 应用中从竖屏模式强制转换为横屏模式
  4. VHDL数据类型转换
  5. Android Navigation Drawer(导航抽屉)
  6. c++builder 重载WindowProc、WndProc 截获消息(比Delphi多一个Message Map方法)
  7. 【C++】模拟实现auto_ptr
  8. 分享一个低配VPS下运行的mysql配置文件
  9. delphi xe 3的EhLib 9.0 Build 9.0.033 Full Source安装
  10. Python +selenium自动化环境的搭建
  11. 2017-12-09 JavaScript实现ZLOGO子集: 测试用例
  12. 生成表结构数据库文档sql语句
  13. simple shell
  14. CDC工具使用
  15. JVM 字节码(三)异常在字节码中的处理(catch 和 throws)
  16. [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)
  17. Android开发随笔记_1
  18. asp.net获取当前网址url【转】
  19. Windbg简明教程(转)
  20. 关于socket的知识总结

热门文章

  1. Android菜鸟的成长笔记(27)——ViewPager的使用
  2. Java集群--大型网站是怎样解决多用户高并发访问的
  3. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation
  4. Unity3d socket通信 切换到web版本时报错SecurityException解决办法
  5. 关于identifier was truncated to &#39;255&#39; characters
  6. 关于http接口开发中json格式数据编码问题处理
  7. Instruments的使用 逻辑查错,内存泄漏分析等工具集
  8. jconsole线程面板中的阻塞总数和等待总数(转)
  9. 【架构之路之WCF全析(一)】--服务协定及消息模式
  10. J2EE的13个规范之JDBC