3

I am using Nested Fragment and The Fragment loads well.But when I load another fragment in this frameLayout and want to load the Nested Fragment again, My app is crashing.

07-14 16:58:21.272: E/AndroidRuntime(1813): java.lang.IllegalStateException: Activity has been destroyed
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at me.kaidul.uhunt.Fragment1.onCreateView(Fragment1.java:23)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)

My parent Fragment class:

public class Fragment1 extends SherlockFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment1, container, false);
        Fragment fragmentC = new HeadlinesFragment();
        Fragment frag = new Child();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.child_fragment, fragmentC );
        transaction.add(R.id.child_fragment2, frag );
        transaction.commit();
        return rootView;
    }

}

Edit: This is how I add all the fragments to activity:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        // Locate Position
        switch (position) {
        case 0:
            ft.replace(R.id.content_frame, fragment1);
            break;
        case 1:
            ft.replace(R.id.content_frame, fragment2);
            break;
        case 2:
            ft.replace(R.id.content_frame, fragment3);
            break;
        }
        ft.commit();
Kaidul
  • 15,409
  • 15
  • 81
  • 150
  • How do you add Fragment1 and other to your Activity? – MaciejGórski Jul 14 '13 at 13:29
  • @MaciejGórski I edited my question and added the snippet to add fragment to activity. Please take a look – Kaidul Jul 14 '13 at 14:17
  • 1
    Could be related to the bug referenced in this answer - http://stackoverflow.com/a/15656428/574785 – ErikR Jul 14 '13 at 14:29
  • @ErikR Hello, yes I have fixed the problem with help of this link you mentioned. Please write your comment as answer so that I can accept it. :D – Kaidul Jul 14 '13 at 15:07
  • 1
    @ErikR Nice hack. But I would go the other way. Always create a new instance of desired fragment. – MaciejGórski Jul 14 '13 at 15:07
  • @MaciejGórski yes, this can be done also. Seems like this is a bug of andorid Suppport Library. I am using v4. Did v13 resolve it? do you know anything about this? – Kaidul Jul 14 '13 at 15:14

1 Answers1

6

This is related to a known bug with nested Fragments. Here is one way to work around it - https://stackoverflow.com/a/15656428/574785

Community
  • 1
  • 1
ErikR
  • 1,052
  • 6
  • 12