3

I have an activity that contains a fragment: ConversationsFragment

It's added to the Activity in this way:

private void showFragment(BaseFragment fragment, String tag) {
    FragmentTransaction transaction = fragmentManager
            .beginTransaction()
            .replace(R.id.content_frame, fragment, tag);

    transaction.commit();

    try {
        fragmentManager.executePendingTransactions();
    } catch (Exception e) {
        Log.e(TAG, "Fail executing pending transactions", e);
    }       
}

And in ConversationsFragment I want to add a "empty case" fragment:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    searchEmptyCaseFragment = new SearchEmptyCaseFragment();
    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.empty_case_container, searchEmptyCaseFragment);
    fragmentTransaction.commit();

    getFragmentManager().executePendingTransactions();  //Added just for testing
    getChildFragmentManager().executePendingTransactions(); //Added just for testing
}

But sometimes, when I enter into the activity and leave it quickly, I get this Exception:

 E/AndroidRuntime( 8232): java.lang.RuntimeException: Unable to destroy activity {com.mycompany.messenger/com.mycompany.messenger.ui.activity.MainActivity}: java.lang.NullPointerException
    E/AndroidRuntime( 8232):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3273)
    E/AndroidRuntime( 8232):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3291)
    E/AndroidRuntime( 8232):    at android.app.ActivityThread.access$1200(ActivityThread.java:130)
    E/AndroidRuntime( 8232):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1248)
    E/AndroidRuntime( 8232):    at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime( 8232):    at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime( 8232):    at android.app.ActivityThread.main(ActivityThread.java:4745)
    E/AndroidRuntime( 8232):    at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime( 8232):    at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime( 8232):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    --
    E/AndroidRuntime( 8232): Caused by: java.lang.NullPointerException
    E/AndroidRuntime( 8232):    at com.mycompany.ioc.IoCActivity.eK(SourceFile:57)
    E/AndroidRuntime( 8232):    at com.mycompany.ioc.IoCFragment.ahu(SourceFile:55)
    E/AndroidRuntime( 8232):    at com.mycompany.ioc.IoCFragment.onAttach(SourceFile:42)
    E/AndroidRuntime( 8232):    at com.mycompany.messenger.search.ui.SearchEmptyCaseFragment.onAttach(SourceFile:43)
    E/AndroidRuntime( 8232):    at android.support.v4.app.Fragment.onAttach(SourceFile:1152)
    E/AndroidRuntime( 8232):    at dh.a(SourceFile:968)
    E/AndroidRuntime( 8232):    at dh.a(SourceFile:1197)
    E/AndroidRuntime( 8232):    at cy.run(SourceFile:738)
    E/AndroidRuntime( 8232):    at dh.execPendingActions(SourceFile:1562)
    E/AndroidRuntime( 8232):    at dh.executePendingTransactions(SourceFile:535)

Which basically tells me that the fragment is trying to perform onAttach when the activity is being destroyed.

Is there any way to ensure that all transactions are already executed before destroying the activity?

Thanks in advance for your time.

Guillermo Merino
  • 3,197
  • 2
  • 17
  • 34

0 Answers0