添加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. ...
随机推荐
- android开发之Toast的多种应用
Toast最基本的功能就是弹出一个弱提示,这个很简单我就不说了,说说Toast一些其他的作用. 来公司的时候,公司产品的1.0版本已经发布出去了,但是1.0是一个必须联网才能使用的产品,在2.0中想让 ...
- build/envsetup.sh中hmm、get_abs_build_var、get_build_var解析
function hmm() { # 打印帮助信息 cat <<EOF Invoke ". build/envsetup.sh" from your shell to ...
- POJ-3278(BFS)
题目: ...
- JS手动创建标签
代码: <html> <head> <title>js标签属性的添加</title> <script > function setxxx() ...
- jsp - java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
使用jsp连接数据库真的不那么容易,之前使用纯java连接sql Server 2008,都是很正常的,但是在使用jsp调用的时候,总是报错ClassNotFoundException.很郁闷 jar ...
- 关于AfterLogic WebMail 的.net版无法上传控件的解决办法
在使用AfterLogic WebMail做客户端的时候发现无论是在FF下还是在IE下发送邮件时附件怎么也无法上传,后来查看代码发现它使用的FLASH上传调用的上传代码是upload.php,问题就出 ...
- T-SQL中的透视和逆透视
透视 今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换.假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣,每一种折扣只对应一个产品价格.下面贴出建表语句和插 ...
- 无法绑定到新的显示成员,参数名:newDisplayMember
此问题不是网上说的 DisplayMember 等先后顺序问题,即使更换绑定数序,只是把错误覆盖而已(绑定的是对象的类名) ValueMember = "Id"; DisplayM ...
- 利用c语言做简单的迷宫小游戏
#include <stdio.h> #define ROW 6 #define COL 6 // 封装打印地图的函数 void printMap(c ...
- redis数据类型(字符串)
字符串 这是最简单Redis类型.如果你只用这种类型,Redis就像一个可以持久化的memcached服务器 127.0.0.1:6379> set mykey somevalue OK 127 ...