添加Fragment注意事项
配置(Configuration )改变是Android应用生命周期的一部分,如果发生了该事件(屏幕从横屏换行为竖屏),就会导致Activity被销毁然后重新创建。就算您在配置文件中设定Activity为竖屏显示的 也无法避免,应为Android应用配置改变的情况有很多种。
如果发生了这种情况,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添加了多次。 关于Fragment使用的更多文档请参考开发者指南。
转载:http://blog.chengyunfeng.com/?p=502#ixzz31JbFGWAu
添加Fragment注意事项的更多相关文章
- Android -- FragmentActivity添加Fragment的序列图
FragmentActivity添加Fragment的序列图
- 使用Fragment 实现动态UI 和 动态添加Fragment
首先写好每个Fragment: 1.在第一个Fragment写一个按钮,使其加载下一个Fragment 布局: <LinearLayout xmlns:android="http:// ...
- 安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 <LinearLayout xmlns:android="http://schema ...
- Android Fragment用法详解(2)--动态添加Fragment
在上一篇文章<Android Fragment用法详解(1)--静态使用Fragment>我们讲解了Fragment的最简单的用法.这次我们来说一说Fragment复杂一丢丢的用法.在代码 ...
- 使用tablayout和recyclerview的时候,报重复添加Fragment错误
原因: 在添加的子Fragment报错了, 出现了空值错误, 此时报出来错误是前一个Fragment重复添加
- 动态添加Fragment
在Fragment简单用法的基础上做修改 一.新建:another_right_fragment.xml <LinearLayout xmlns:android="http://sch ...
- Activity动态添加Fragment时遇到的问题
1.Activity动态调用代码 TitleFragement a = new TitleFragement(); getFragmentManager().beginTransacti ...
- Fragment 嵌套Fragment注意事项
最近项目新功能需要在垂直方方向可以循环滚动,并且水平方向也可以水平循环滚动,并且可以定位到指定item上.很自然的想到了ViewPager和 VerticalViewPager来解决项目需求,UI的大 ...
- Android动态添加Fragment
Android动态添加Fragment 效果图如下: 项目结构图如下: Fragment1: package com.demo.dongtaifragment; import android.app. ...
随机推荐
- System Operations on AWS - Lab 2 - Configuring VPC
建立包含Public和Private子网的VPC,建立Internet Gateway,建立Public和Private子网的路由表,创建NAT和Bastion EC2实例 1. 配置你的私有虚拟云 ...
- Plain old data structure(POD)
Plain old data structure, 缩写为POD, 是C++语言的标准中定义的一类数据结构,POD适用于需要明确的数据底层操作的系统中.POD通常被用在系统的边界处,即指不同系统之间只 ...
- FragmentTransaction.addToBackStack无效的问题
FragmentTransaction.addToBackStack无效的问题: 如果当前的类继承的ActionBarActivity,则FragmentManager必须来自v4包,这样addToB ...
- javascript类继承系列五(其他方式继承)
除了前面学习的三种继承外,还有另外三种:原型继承寄生继承,寄生组合继承都是以: function object(o) { function F() { } F.prototype = o; retur ...
- oracle学习笔记3:基本的SQL语句
oracle基本的SQL语句和SQLSERVER基本一样,在这里只简单列出与SQLSERVER不一样的地方 1.select * from orderinfo where address = 'abc ...
- 怎样在win7上远程连接linux系统
window操作系统的电脑 一台安装了linux系统的服务器 putty.exe小软件 方法/步骤 在前面的环境和软件都有的情况下,双击putty.exe软件,如下图: 在软件界面中的:Hos ...
- Java之循环输出等腰三角形
public class aaa{ public static void main(String[] args) { int max=5; for(int i=1;i<=5;i++){//控制行 ...
- 虚拟机固定IP访问外网配置
大家都知道虚拟机网络连接有三种模式,桥接,host-only,NAT,不再赘述. 这里说一下桥接模式下,实现主机与虚拟机通讯,虚拟机与虚拟机通信,虚拟机访问外网,废话不多说,直接说解决方案: 1.本地 ...
- [lua]原来这才是表驱动的正确表达方式
曾经写了个很煞笔的脚本模拟switch..case语法形式.[lua]尝试一种Case语法糖 而今实际项目应用中突发,原来这才是正确的表驱动方式表达.如下所贴: function event_do( ...
- 也谈Excel导出
吐槽 Excel导出在天朝的软件大环境下,差点成为软件开发必备.俺就遇到过,所有报表不提供导出功能,就能不验收的囧事.报表能查看能打印能形成图表已经完美,实在搞不懂导出excel有个毛用,但是公司依靠 ...