您的位置:首页 > 编程语言 > Java开发

java.lang.IllegalStateException: No activity

2016-01-06 17:37 411 查看
错误提示:

java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1474)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)

.......

这个问题是在解决上一篇文章(http://blog.csdn.net/leewenjin/article/details/19409863)中指出的问题后出现的。问题解决方法是参考文章:
http://stackoverflow.com/questions/15207305/getting-the-error-java-lang-illegalstateexception-activity-has-been-destroyed
bug出现的原理问题及解决方法是

This seems to be a bug in the newly added support for nested fragments. Basically, the child FragmentManager ends up with a broken internal state when it is detached from the activity. A short-term workaround that fixed it for me is to add the following to
onDetach() of every Fragment which you call getChildFragmentManager() on:

解决方法重写onDetach()

[java] view
plaincopy





@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);  

        }  

      

    }  

其中的Field 是

java.lang.reflect.Field

引起bug的原因

If you look at the implementation of Fragment, you'll see that when moving to the detached state, it'll reset its internal state. However, it doesn't reset mChildFragmentManager (this is a bug in the current version of the support library). This causes it to
not reattach the child fragment manager when the Fragment is reattached, causing the exception you saw.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: