fragment的注意事项
2015-07-01 21:53
288 查看
配置(Configuration )改变是Android应用生命周期的一部分,如果发生了该事件(屏幕从横屏换行为竖屏),就会导致Activity被销毁然后重新创建。就算您在配置文件中设定Activity为竖屏显示的 也无法避免,应为Android应用配置改变的情况有很多种。
如果发生了这种情况,Fragment也会被销毁然后重新创建。如果您是在运行时(在Java代码中添加Fragment到Activity,不是在Activity的布局文件中声明的)创建的,则需要额外小心:
当Activity第一次创建的时候,您需要添加Fragment;当由于配置条件改变导致Activity被重新创建则无需再次添加Fragment(系统会自动添加Fragment)。
所以问题来了,您如何知道何时应该在onCreate函数中添加Fragment呢?
判断的方法就是检查 savedInstanceState 参数,如果该参数为null说明是第一次创建,需要添加Fragment;如果不是null则无需添加。代码如下:
如果您没有按照上面的方式添加Fragment,则您的应用可能会出现一种奇怪的现象,同样的Fragment添加了多次。
如果发生了这种情况,Fragment也会被销毁然后重新创建。如果您是在运行时(在Java代码中添加Fragment到Activity,不是在Activity的布局文件中声明的)创建的,则需要额外小心:
当Activity第一次创建的时候,您需要添加Fragment;当由于配置条件改变导致Activity被重新创建则无需再次添加Fragment(系统会自动添加Fragment)。
所以问题来了,您如何知道何时应该在onCreate函数中添加Fragment呢?
判断的方法就是检查 savedInstanceState 参数,如果该参数为null说明是第一次创建,需要添加Fragment;如果不是null则无需添加。代码如下:
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstnaceState); // Only add fragment if this is the initial Activity creation if (savedInstanceState == null) { FragmentManager fragmentManager = getFragmentManager() FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit(); } else { // Don't add the fragment! // (and use savedInstanceState to restore Activity state) } } }
如果您没有按照上面的方式添加Fragment,则您的应用可能会出现一种奇怪的现象,同样的Fragment添加了多次。
相关文章推荐
- 无论IT代码系统还是人生都是有惯性的
- Maven搭建SpringMVC+Hibernate项目详解
- 《Java课程实习》日志(周二)
- 【Bug记录】Anroid解析xml 出现unexpected token错误
- [leetcode] Search Insert Position
- 解决ngui挡住粒子的问题
- 在ubuntu下用apt-get安装和管理java
- DragonFlow导读(by quqi99)
- Complete The Pattern #1
- js正则表达式
- iOS UILabel多行时文字向下偏移
- 排序算法之直接选择排序Java版
- C++ Keywords: typedef
- 2015070101 - 霍去病
- [精华]Hadoop,HBase分布式集群和solr环境搭建
- 偶遇mysql外键不好使
- 匿名管道(pipe)
- opencv 拉伸、扭曲、旋转图像-透视变换
- ASM(三) 利用Method组件动态生成方法的字节码
- JVM StackMapTable 属性的作用及理解