java.lang.IllegalStateException: No activity

1975 ワード

エラーメッセージ:
java.lang.IllegalStateException: No activityat 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
バグ発生の原理問題及び解決方法は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()
@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
バグの原因は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.