2

I have 3 fragment tabs, fragment1, fragment2, and fragment3. I have created another fragment tabs in fragment2. The problem is whenever I reselect fragment2 that contains fragment tabs, my app crashes with the LOGCAT shown below. I have follow a question in stackoverflow on this link Getting the error "Java.lang.IllegalStateException Activity has been destroyed" when using tabs with ViewPager but it doesn't seems to work either. Also, am I importing the correct library "import java.lang.reflect.Field;"?

fragment2.java

import com.actionbarsherlock.app.SherlockFragment;
import android.os.Bundle;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends SherlockFragment{
     private FragmentTabHost mTabHost;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            mTabHost = new FragmentTabHost(getSherlockActivity());
            mTabHost.setup(getSherlockActivity(), getChildFragmentManager(), R.layout.fragmenttab2);

            mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
                    Fragment1.class, null);
            mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
                     Fragment2.class, null);
            mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
                     Fragment3.class, null);

            return mTabHost;
        }

        @Override
        public void onDestroyView() {
            super.onDestroyView();
            mTabHost = null;
        }


}

LogCat :

 07-22 16:18:50.668: E/AndroidRuntime(29774): FATAL EXCEPTION: main
07-22 16:18:50.668: E/AndroidRuntime(29774): java.lang.IllegalStateException: Activity has been destroyed
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:278)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.View.dispatchAttachedToWindow(View.java:9953)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2198)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2206)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.addViewInner(ViewGroup.java:3376)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.addView(ViewGroup.java:3208)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.addView(ViewGroup.java:3165)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.view.ViewGroup.addView(ViewGroup.java:3145)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:922)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.os.Handler.handleCallback(Handler.java:605)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.os.Looper.loop(Looper.java:137)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at android.app.ActivityThread.main(ActivityThread.java:4507)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at java.lang.reflect.Method.invokeNative(Native Method)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at java.lang.reflect.Method.invoke(Method.java:511)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
07-22 16:18:50.668: E/AndroidRuntime(29774):    at dalvik.system.NativeStart.main(Native Method)
Community
  • 1
  • 1
KC Chai
  • 1,607
  • 9
  • 30
  • 59

2 Answers2

0

When writing this code:

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

means you wan to get the filed you declared in Fragment2.

and i can see mChildFragmentManager field in Fragment2.

If you are sure this filed is declared in super class, you should use Fragment2.class.getField

kvh
  • 2,118
  • 19
  • 29
  • try replace Fragment2.class.getDeclaredField("mChildFragmentManager"); by Fragment2.class.getField("mChildFragmentManager"); – kvh Jul 22 '13 at 07:44
0

Try this for your childFragmentManager

childeFragmentManager = getChildFragmentManager().

It was added in support library after release of 4.2 as nested fragments weren't supported before that.

Source http://developer.android.com/about/versions/android-4.2.html#NestedFragments

vKashyap
  • 580
  • 6
  • 17
  • Sorry, may I know where should I put this? – KC Chai Jul 22 '13 at 08:04
  • Sorry, you edited your question. In your last edit you were using reflection (`Field`) for finding `FragmentManager` in `onDetach()`. So instead of that use this. I don't know how you are adding child fragment inside your fragment. But don't use `getFragmentManager()` for adding fragment inside your fragment, instead use `getChildFragmentManager()`. – vKashyap Jul 22 '13 at 09:33