From e3b49bba95ef689427b21df5ee7b2d23d16125fe Mon Sep 17 00:00:00 2001 From: Marten Gajda Date: Fri, 1 Feb 2019 09:54:49 +0100 Subject: [PATCH] Detect state saved before FM commit, fixes #756 Under certain conditions the task details fragment was about to be replaced after the fragment manager already saved its state. This caused a crash. This change checks whether the state has already been saved before committing the transaction. --- .../main/java/org/dmfs/tasks/TaskListActivity.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/opentasks/src/main/java/org/dmfs/tasks/TaskListActivity.java b/opentasks/src/main/java/org/dmfs/tasks/TaskListActivity.java index a9f4ebd79..247fb7ace 100644 --- a/opentasks/src/main/java/org/dmfs/tasks/TaskListActivity.java +++ b/opentasks/src/main/java/org/dmfs/tasks/TaskListActivity.java @@ -455,9 +455,14 @@ public ExpandableGroupDescriptor getGroupDescriptor(int pageId) private void replaceTaskDetailsFragment(@NonNull Fragment fragment) { - getSupportFragmentManager().beginTransaction() - .setCustomAnimations(0, R.anim.openttasks_fade_exit, 0, 0) - .replace(R.id.task_detail_container, fragment, DETAILS_FRAGMENT_TAG).commit(); + FragmentManager fragmentManager = getSupportFragmentManager(); + // only change state if the state has not been saved yet, otherwise just drop it + if (!fragmentManager.isStateSaved()) + { + fragmentManager.beginTransaction() + .setCustomAnimations(0, R.anim.openttasks_fade_exit, 0, 0) + .replace(R.id.task_detail_container, fragment, DETAILS_FRAGMENT_TAG).commit(); + } }