注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

罔少年

QQ 332256483

 
 
 

日志

 
 

Fragment生命周期 切换后状态详解  

2017-01-20 16:56:53|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在使用fragment切换时,会经常遇到2种情况

1、切换后页面重新加载,(每次都执行onCreateViewonCreate)

2、切换后页面保持不变  (只执行onHiddenChanged)


下面分别来讲下实现代码

Fragment生命周期 切换后状态详解 - 我是小黄人 - 爵爷

1、在activity的layout中加入

<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>

2、默认加载fragment1

if(fragment1== null) {
fragment1= new Fragment1();
}
if(fragmentManager == null) {
fragmentManager = getFragmentManager();
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frameLayout, fragment1, "fragment1").commit();
3、切换到fragment2
if(fragment2== null) {
fragment2= new Fragment1();
}
if(fragmentManager == null) {
fragmentManager = getFragmentManager();
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replce(R.id.frameLayout, fragment2, "fragment2").commit();

默认fragment1加载用add,随后都用replce,这样,都会调用fragment的onCreate(),onCreateView()等方法



 Fragment生命周期 切换后状态详解 - 我是小黄人 - 爵爷

1、在activity的layout中加入

<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>

2、默认加载fragment1

if(fragment1== null) {
fragment1= new Fragment1();
}
if(fragmentManager == null) {
fragmentManager = getFragmentManager();
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frameLayout, fragment1, "fragment1").commit();
3、切换到fragment2
if(fragmentManager == null) {
fragmentManager = getFragmentManager();
}
if(fragment1!= null) {
fragmentManager.beginTransaction().hide(fragment1).commit();
}
if(fragment2== null) {
fragment2= new MineBuyStateFragment();
fragmentManager.beginTransaction().add(R.id.frameLayout, fragment2, "fragment2").commit();
}else {
fragmentManager.beginTransaction().show(fragment2).commit();
}

这种比第一种复杂一点,默认fragment1加载还是用add, 然后加载fragment2时,先hide fragment1,如果fragment2没加载过,那么还是用add,如果已经加载过,那么就用show
FragmentTransaction每commit()一次,都必须重新获取
  评论这张
 
阅读(12)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017