diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/Fragment.java | 37 | ||||
| -rw-r--r-- | core/java/android/app/FragmentManager.java | 4 |
2 files changed, 39 insertions, 2 deletions
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index c7bcc54b51b6..c5b93cd62b4c 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -509,6 +509,10 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene // True if mHidden has been changed and the animation should be scheduled. boolean mHiddenChanged; + // The cached value from onGetLayoutInflater(Bundle) that will be returned from + // getLayoutInflater() + LayoutInflater mLayoutInflater; + /** * State information that has been retrieved from a fragment instance * through {@link FragmentManager#saveFragmentInstanceState(Fragment) @@ -1389,6 +1393,38 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** + * Returns the cached LayoutInflater used to inflate Views of this Fragment. If + * {@link #onGetLayoutInflater(Bundle)} has not been called {@link #onGetLayoutInflater(Bundle)} + * will be called with a {@code null} argument and that value will be cached. + * <p> + * The cached LayoutInflater will be replaced immediately prior to + * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} and cleared immediately after + * {@link #onDetach()}. + * + * @return The LayoutInflater used to inflate Views of this Fragment. + */ + public final LayoutInflater getLayoutInflater() { + if (mLayoutInflater == null) { + return performGetLayoutInflater(null); + } + return mLayoutInflater; + } + + /** + * Calls {@link #onGetLayoutInflater(Bundle)} and caches the result for use by + * {@link #getLayoutInflater()}. + * + * @param savedInstanceState If the fragment is being re-created from + * a previous saved state, this is the state. + * @return The LayoutInflater used to inflate Views of this Fragment. + */ + LayoutInflater performGetLayoutInflater(Bundle savedInstanceState) { + LayoutInflater layoutInflater = onGetLayoutInflater(savedInstanceState); + mLayoutInflater = layoutInflater; + return mLayoutInflater; + } + + /** * @deprecated Use {@link #onInflate(Context, AttributeSet, Bundle)} instead. */ @Deprecated @@ -2835,6 +2871,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene void performDetach() { mCalled = false; onDetach(); + mLayoutInflater = null; if (!mCalled) { throw new SuperNotCalledException("Fragment " + this + " did not call through to super.onDetach()"); diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 91578a2da9c7..2676f264415d 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -1259,7 +1259,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate } } f.mContainer = container; - f.mView = f.performCreateView(f.onGetLayoutInflater( + f.mView = f.performCreateView(f.performGetLayoutInflater( f.mSavedFragmentState), container, f.mSavedFragmentState); if (f.mView != null) { f.mView.setSaveFromParentEnabled(false); @@ -1431,7 +1431,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate void ensureInflatedFragmentView(Fragment f) { if (f.mFromLayout && !f.mPerformedCreateView) { - f.mView = f.performCreateView(f.onGetLayoutInflater( + f.mView = f.performCreateView(f.performGetLayoutInflater( f.mSavedFragmentState), null, f.mSavedFragmentState); if (f.mView != null) { f.mView.setSaveFromParentEnabled(false); |
