异常:

java.lang.IllegalStateException: Activity has been destroyed

at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)

at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)

at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)

at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)

at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)

at android.support.v4.view.ViewPager.populate(ViewPager.java:881)

at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:434)

at com.itcode.reader.fragment.MineFragment.onViewCreated(MineFragment.java:49)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:925)

at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)

at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)

at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)

at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)

at android.os.Handler.handleCallback(Handler.java:615)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

场景:

Fragment中有一个ViewPager,ViewPager的每一个pager为Fragment

调用代码:

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

viewPager = (ViewPager) view.findViewById(R.id.pager);

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager(),TITLE);

viewPager.setAdapter(adapter);

TabPageIndicator mIndicator = (TabPageIndicator) view.findViewById(R.id.indicator);

mIndicator.setViewPager(viewPager);

}

解决方式:

在每一个调用getChildFragmentManager()的fragment中增加:

@Override

public void onDetach() {

super.onDetach();

try {

Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");

childFragmentManager.setAccessible(true);

childFragmentManager.set(this, null);

} catch (NoSuchFieldException e) {

throw new RuntimeException(e);

} catch (IllegalAccessException e) {

throw new RuntimeException(e);

}

}

就可以!

异常解析:

假设你细致查看Fragment的实现,你会看到当fragment进行到detached状态时,它会重置它的内部状态。

然而,它没有重置mChildFragmentManager.这是当前版本号support库的一个bug.

这导致在Fragment又一次attach时,它(fragment)没有又一次attachm childFragmentManager。从而引发了上面的异常.

调用getChildFragmentManager时出现的Bug的更多相关文章

  1. spark-streming 中调用spark-sql时过程遇到的问题

    在spark-streming 中调用spark-sql时过程遇到的问题 使用版本:spark-2.1.0 JDK1.8 1. spark-sql中对limit 的查询结果使用sum() 聚合操作不生 ...

  2. 深入分析glibc内存释放时的死锁bug

    通常我们认为一旦内存写溢出,程序就很容易崩溃.所以服务器上通常会对一些重要进程做脚本保护,一旦崩溃立即重新拉起. 最近发现我们一个公共服务内存写溢出时程序没有崩溃,而是卡死了. 为了深入分析原因,我们 ...

  3. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  4. 脚本调用脚本时.与bash的差别

    在做项目时,发现脚本调用脚本时,会意外退出任务. 下面的脚本是父脚本: #!/bin/bash . ./data/child.sh echo 123sds echo "45gfdg" ...

  5. 外壳exe通过反射调用dll时

    外壳exe通过反射调用dll时,dll是 4.0的框架,外壳exe也需要编译成4.0的框架,如果dll本身有调用32位的dll,那么外壳exe也需要编译成32位. 调试时报的那个错,直接继续运行,不影 ...

  6. Chrome渲染Transition时页面闪动Bug

    前段时间,有同事和会员反馈使用Chrome访问淘宝首页会出现画面闪动的现象,但是我在Mac和Win下面的Chrome都无法重现这个问题,后来重装了一遍Win7下的Chrome Beta版本,终于重现了 ...

  7. 修改ViewPager调用setCurrentItem时,滑屏的速度

    原文摘自: 修改ViewPager调用setCurrentItem时,滑屏的速度 在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCur ...

  8. 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法

    [导读]ServiceDescriptionImporter是创建Web Service 时使用的类,它是引用继承System.Web.Services 当我将VS2005里写的一段代码放在VS201 ...

  9. EF 6 调用存储过程时返回多结果集和OUTPUT参数问题

    原文地址:http://q.cnblogs.com/q/56836/ 各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题 目前已经可以调用存储过程并且可以返回多个结果集. 但 ...

随机推荐

  1. (19)python扩展

    当python程序遇到瓶颈时,可以考略扩展其他语言 例如:程序的某部分,需要高速度,或者与硬件交互时可以用到C语言.当其他语言有现成的程序,重新起来很麻烦时.有些功能用别的语言写更方便时 扩展语言有  ...

  2. Elasticsearch使用java读取数据报错NoNodeAvailableException: None of the configured nodes are available: [127.0.0.1:9300]

    对于这个问题,大部分人出现在这个地方: Client client = new TransportClient(settings).addTransportAddress(new InetSocket ...

  3. JavaScript代码放在head和body的区别(QRCode生成)

    1.在head中时,所代表的functions只加载而不执行,执行是在某一事件触发后才开始. 2.在body中时,直接加载并执行 典型的区别: 如果有不在函数中的执行语句,比如变量初始化,如果在hea ...

  4. Column 1 of table 'xxx' cannot be converted from type 'varchar(33)' to type 'varchar(11)'

    mysql主从同步失败.错误日志如下. Column 1 of table 'xxx' cannot be converted from type 'varchar(33)' to type 'var ...

  5. Windows 环境下 Redis 安装

    1.redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/MicrosoftArchive/redis/rele ...

  6. 【循环节】 Codeforces Round #401 (Div. 2) A. Shell Game

    容易发现存在循环节. #include<cstdio> using namespace std; int n,x,a[3][6]={{0,1,2,2,1,0},{1,0,0,1,2,2}, ...

  7. 如何在mac中通过命令行使用sublime

    ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" ~/bin/subl 后续就可以通过  ...

  8. JQuery提示$(...).on is not a function解决方法

    版本太低了,引入较高的版本,如jquery-1.8.3.min.js

  9. 阿里云乌班图16配置-PHP环境(包括mysql及apache安装)

    1. 安装apache  apt-get update apt-get install apache2 service apache2 restart   通过浏览器访问服务器的IP,如果出现Apac ...

  10. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...