diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-03-03 22:23:07 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-03 22:23:07 -0800 |
commit | 48f91e35c5188f3dc78c12b8e8638a248221691b (patch) | |
tree | b4921f287b2d23044f7bd9b865d0cce06474497f /core/java/android/app | |
parent | 1e158e9ce78c25dc5de402f14654a8955de7fddc (diff) | |
parent | e3a7f628c6d9fef42be24999b3137ebe5c6f3525 (diff) | |
download | frameworks_base-48f91e35c5188f3dc78c12b8e8638a248221691b.zip frameworks_base-48f91e35c5188f3dc78c12b8e8638a248221691b.tar.gz frameworks_base-48f91e35c5188f3dc78c12b8e8638a248221691b.tar.bz2 |
Merge "Fix Fragment.onInflate() to actually work correctly." into honeycomb-mr1
Diffstat (limited to 'core/java/android/app')
-rw-r--r-- | core/java/android/app/Activity.java | 4 | ||||
-rw-r--r-- | core/java/android/app/Fragment.java | 53 | ||||
-rw-r--r-- | core/java/android/app/FragmentManager.java | 6 |
3 files changed, 47 insertions, 16 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 3a82c78..edfd6ef 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -4137,7 +4137,7 @@ public class Activity extends ContextThemeWrapper fragment.mInLayout = true; fragment.mImmediateActivity = this; fragment.mFragmentManager = mFragments; - fragment.onInflate(attrs, fragment.mSavedFragmentState); + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); mFragments.addFragment(fragment, true); } else if (fragment.mInLayout) { @@ -4156,7 +4156,7 @@ public class Activity extends ContextThemeWrapper // from last saved state), then give it the attributes to // initialize itself. if (!fragment.mRetaining) { - fragment.onInflate(attrs, fragment.mSavedFragmentState); + fragment.onInflate(this, attrs, fragment.mSavedFragmentState); } mFragments.moveToState(fragment); } diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 8982110f..53dc7c8 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -859,32 +859,57 @@ public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener } /** + * @deprecated Use {@link #onInflate(Activity, AttributeSet, Bundle)} instead. + */ + @Deprecated + public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { + mCalled = true; + } + + /** * Called when a fragment is being created as part of a view layout * inflation, typically from setting the content view of an activity. This - * will be called immediately after the fragment is created from a <fragment> + * may be called immediately after the fragment is created from a <fragment> * tag in a layout file. Note this is <em>before</em> the fragment's * {@link #onAttach(Activity)} has been called; all you should do here is - * parse the attributes and save them away. A convenient thing to do is - * simply copy them into a Bundle that is given to {@link #setArguments(Bundle)}. + * parse the attributes and save them away. * * <p>This is called every time the fragment is inflated, even if it is - * being inflated into a new instance with saved state. Because a fragment's - * arguments are retained across instances, it may make no sense to re-parse - * the attributes into new arguments. You may want to first check - * {@link #getArguments()} and only parse the attributes if it returns null, - * the assumption being that if it is non-null those are the same arguments - * from the first time the fragment was inflated. (That said, you may want - * to have layouts change for different configurations such as landscape - * and portrait, which can have different attributes. If so, you will need - * to re-parse the attributes each time this is called to generate new - * arguments.)</p> + * being inflated into a new instance with saved state. It typically makes + * sense to re-parse the parameters each time, to allow them to change with + * different configurations.</p> + * + * <p>Here is a typical implementation of a fragment that can take parameters + * both through attributes supplied here as well from {@link #getArguments()}:</p> + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java + * fragment} + * + * <p>Note that parsing the XML attributes uses a "styleable" resource. The + * declaration for the styleable used here is:</p> + * + * {@sample development/samples/ApiDemos/res/values/attrs.xml fragment_arguments} * + * <p>The fragment can then be declared within its activity's content layout + * through a tag like this:</p> + * + * {@sample development/samples/ApiDemos/res/layout/fragment_arguments.xml from_attributes} + * + * <p>This fragment can also be created dynamically from arguments given + * at runtime in the arguments Bundle; here is an example of doing so at + * creation of the containing activity:</p> + * + * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java + * create} + * + * @param activity The Activity that is inflating this fragment. * @param attrs The attributes at the tag where the fragment is * being created. * @param savedInstanceState If the fragment is being re-created from * a previous saved state, this is the state. */ - public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { + public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { + onInflate(attrs, savedInstanceState); mCalled = true; } diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index d8d0a5b..ab60cf0 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -660,6 +660,12 @@ final class FragmentManagerImpl extends FragmentManager { } if (f.mState < newState) { + // For fragments that are created from a layout, when restoring from + // state we don't want to allow them to be created until they are + // being reloaded from the layout. + if (f.mFromLayout && !f.mInLayout) { + return; + } if (f.mAnimatingAway != null) { // The fragment is currently being animated... but! Now we // want to move our state back up. Give up on waiting for the |