The app crashes only when I start this fragment (for the first time) and press the back button at the same time. I have not overrided onBackPressed() in my activity.
Code:
Fragment Class
public class Fragment_View extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentview, container, false);
root_view = view;
setupExtraViews();
return view;
}
private void setupExtraViews() {
if (root_view.findViewById(R.id.someview) != null) {
Fragment_Top_Bar top_bar = new Fragment_Top_Bar();
//TODO: app crashes here on the .commit part when this fragment is started and back button is pressed at the same time.
getChildFragmentManager().beginTransaction().
add(R.id.someview, top_bar).commit();
}
}
...
} The exception is:
E/InputEventSender﹕ Exception dispatching finished signal.
E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI﹕ java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1387)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
at in.com.xxxxxx.main_app.settings.Fragment_Class.setupExtraViews(Fragment_Class.java:45)
at in.com.xxxxxx.main_app.settings.Fragment_Class.onCreateView(Fragment_Class.java:24)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:501)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:176)
at android.app.Activity.onKeyUp(Activity.java:2274)
at android.view.KeyEvent.dispatch(KeyEvent.java:2985)
at android.app.Activity.dispatchKeyEvent(Activity.java:2508)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2174)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4505)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4472)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4033)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4087)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4056)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4171)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4064)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4228)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4033)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4087)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4056)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4064)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4033)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4087)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4056)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4204)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4364)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2257)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1907)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1898)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2234)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:138)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
And then this exact same error shows again. So the app crashes when the back button is pressed while the fragment is being created, and then this exception shows up twice. I figured that .commit() is asynchronous. So I think, between the time the schedular actually commits and the time the schedular gets the commit, the activity is being destroyed by onBackPressed. Hence the error. Im not sure that this is the actual reason. So please help...