出现这个问题的原因是因为使用的transcation.replace(fragmentTwo);的方式进行碎片切换的。

解决方案是使用add和show、hide方法组合实现碎片的切换(应该是显示、隐藏)。

我这里使用的是RadioButton控件的Id值。

/**
* 切换碎片:使用show和hide以及add,不要使用replace(频繁来回切换的时候容易发生内存溢出的错误)
*/
public void onTabSelected(int radioGroupId) {
//开启一个事务
FragmentTransaction transcation = fragmentManager.beginTransaction();
//设置淡入淡出效果
transcation.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out);
//隐藏全部碎片
hideFragments(transcation);
//有选择的显示碎片
switch (radioGroupId) { case R.id.home:
if(fragmentOne == null){
fragmentOne = new FragmentOne();
transcation.add(R.id.center_layout, fragmentOne);
}else{
transcation.show(fragmentOne);
}
break; case R.id.category:
if(fragmentTwo == null){
fragmentTwo = new FragmentTwo();
transcation.add(R.id.center_layout, fragmentTwo);
}else{
transcation.show(fragmentTwo);
}
break; case R.id.collect:
if(fragmentThree == null){
fragmentThree = new FragmentThree();
transcation.add(R.id.center_layout, fragmentThree);
}else{
transcation.show(fragmentThree);
}
break; case R.id.setting:
if(fragmentFour == null){
fragmentFour = new FragmentFour();
transcation.add(R.id.center_layout, fragmentFour);
}else{
transcation.show(fragmentFour);
}
break; default:
break;
}
transcation.commitAllowingStateLoss();
} /**隐藏全部碎片
* 需要注意:不要在OnResume方法中实例化碎片,因为先添加、显示,才可以隐藏。否则会出现碎片无法显示的问题*/
private void hideFragments(FragmentTransaction transaction) {
if (null != fragmentOne) {
transaction.hide(fragmentOne);
}
if (null != fragmentTwo) {
transaction.hide(fragmentTwo);
}
if (null != fragmentThree) {
transaction.hide(fragmentThree);
}
if (null != fragmentFour) {
transaction.hide(fragmentFour);
}
}

需要注意,不要在OnResume方法中实例化碎片。

// 存放底部菜单的各个RadioButton的Id值
private int[] radioButtonIds = {R.id.home,R.id.category,R.id.collect,R.id.setting}; @Override
protected void onResume() { //切换碎片
onTabSelected(radioButtonIds[0]); super.onResume();
}

Fragment碎片频繁来回切换的时候报java.lang.IllegalStateException: No activity的更多相关文章

  1. maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext

    报这个异常java.lang.IllegalStateException: Failed to load ApplicationContext的时候,通常是因为applicationContent.x ...

  2. response.sendRedirect 报 java.lang.IllegalStateException 异常的解决思路

    今天在进行代码开发的时候,出现了 java.lang.IllegalStateException异常,response.sendRedirect("./DEFAULT.html") ...

  3. [Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常

    转载:http://blog.csdn.net/winson_jason/article/details/20357435 下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题,今天时 ...

  4. 如何进行fragment中的来回切换?

    本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解如何进行fragment中的来回切 ...

  5. eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo

    报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...

  6. eclipse 运行报java.lang.OutOfMemoryError: PermGen space解决方法

    一.在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 set JAVA_ ...

  7. Tomcat报java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler

    最近在生产环境部署Tomcat的时候,在启动的时候,在控制台报"java.lang.ClassNotFoundException: 1catalina.org.apache.juli.Fil ...

  8. idea生成JAVADOC 报java.lang.IllegalArgumentException解决方案[终极]

    idea生成javadoc文档,总是会报  java.lang.IllegalArgumentException     at sun.net.www.ParseUtil.decode(ParseUt ...

  9. Eclipse下执行main函数报java.lang.NoClassDefFoundError的解决

    今天执行eclipse下的一个java类,无论run还是debug,都报java.lang.NoClassDefFoundError.而且把main中函数都注释掉,执行还是报一样的错. 检查了一下这个 ...

随机推荐

  1. 白书P61 - 点集配对问题

    白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using ...

  2. apache开源项目--gora

    Gora 是一个应用于 NoSQL 数据库的 ORM 框架,支持包括:Apache HBase/Apache Cassandra

  3. apache开源项目--lucence

    Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Lucene的目的是为软件开发人员提供一个简单易用 ...

  4. 热修复 RocooFix篇(一)

    吐槽之前先放一张大帅图. (md 这张图貌似有点小 不纠结这个了==) 有时候项目刚刚上线或者迭代 测试或者在线上使用测出一个bug来 真让人蛋疼 不得不重新改bug测试 打包混淆上线感觉就向find ...

  5. android手机屏幕分辨率 及 sp dip(dp) px 区别 及高中低分辨率时处理

    分辨率,是指单位长度内包含的像素点的数量,它的单位通常为像素/英寸(ppi).以分辨率为1024×768的屏幕来说,即每一条水平线上包含有1024个像素点,共有768条线,即扫描列数为1024列,行数 ...

  6. [liu yanling]软件测试的过程

    测试过程按4个步骤进行,即单元测试.组装测试.确认测试和系统测试.

  7. @DataProvider ITestContext 参数

    package roger.testng; import java.util.Random; import org.testng.ITestContext; import org.testng.ann ...

  8. 韦东山yy公开课笔记(2)--各种杂的问题

    1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 . ...

  9. FCLK PCLK HCLK

    一.对clock的基本认识 1 s3c2410的clock & power management模块包含三个部分:clock control.usb control.power control ...

  10. Linux内核系列之Block块层(一)

    .Block块层入口函数为 genhd_device_init(),先对该函数开始分析: 函数实现源码: static int __init genhd_device_init(void) {     ...