diff options
author | cnchen <cnchen@google.com> | 2019-01-29 19:55:35 +0800 |
---|---|---|
committer | Cn Chen <cnchen@google.com> | 2019-01-29 12:18:44 +0000 |
commit | 17b69519556165d2920e76bd974fffa33079031e (patch) | |
tree | 6ad7dd8708899e6c1b6ae79cb4ed693cdd93c393 | |
parent | d41e3be4ea5df08459129d02462cb73d1aa8a205 (diff) | |
download | setupcompat-17b69519556165d2920e76bd974fffa33079031e.tar.gz |
Check fragment manager state before attach lifecycle fragment and catch IllegalStateException.
Test: atest
Bug: b/123329829
Change-Id: I108630c1aaa8f160666596a7c240f56042cfdf12
-rw-r--r-- | main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java b/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java index f79956d..a617fd7 100644 --- a/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java +++ b/main/java/com/google/android/setupcompat/lifecycle/LifecycleFragment.java @@ -58,18 +58,27 @@ public class LifecycleFragment extends Fragment { if (VERSION.SDK_INT > VERSION_CODES.M) { FragmentManager fragmentManager = activity.getFragmentManager(); - Fragment fragment = activity.getFragmentManager().findFragmentByTag(FRAGMENT_ID); - if (fragment == null) { - LifecycleFragment lifeCycleFragment = new LifecycleFragment(); - fragmentManager.beginTransaction().add(lifeCycleFragment, FRAGMENT_ID).commitNow(); - fragment = lifeCycleFragment; - } else if (!(fragment instanceof LifecycleFragment)) { - Log.wtf( - LOG_TAG, - activity.getClass().getSimpleName() + " Incorrect instance on lifecycle fragment."); + if (fragmentManager != null && !fragmentManager.isDestroyed()) { + Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_ID); + if (fragment == null) { + LifecycleFragment lifeCycleFragment = new LifecycleFragment(); + try { + fragmentManager.beginTransaction().add(lifeCycleFragment, FRAGMENT_ID).commitNow(); + fragment = lifeCycleFragment; + } catch (IllegalStateException e) { + Log.e( + LOG_TAG, + "Error occurred when attach to Activity:" + activity.getComponentName(), + e); + } + } else if (!(fragment instanceof LifecycleFragment)) { + Log.wtf( + LOG_TAG, + activity.getClass().getSimpleName() + " Incorrect instance on lifecycle fragment."); + return null; + } + return (LifecycleFragment) fragment; } - - return (LifecycleFragment) fragment; } } |