OSDN Git Service

Call Activity#onAttachFragment()
authorTodd Kennedy <toddke@google.com>
Mon, 4 May 2015 19:29:50 +0000 (12:29 -0700)
committerTodd Kennedy <toddke@google.com>
Mon, 4 May 2015 21:00:38 +0000 (14:00 -0700)
This was accidentally removed during the changes to abstract a Fragment host.
Also ensure Fragment#onInflate(Activity) gets invoked

Bug: 20825263
Change-Id: I981266ae1e8817db5c82ec4609bbcf4a5e676fee

api/current.txt
api/system-current.txt
core/java/android/app/Activity.java
core/java/android/app/Fragment.java
core/java/android/app/FragmentHostCallback.java
core/java/android/app/FragmentManager.java

index 2bbe2f1..c8069e1 100644 (file)
@@ -4491,6 +4491,7 @@ package android.app {
 
   public abstract class FragmentHostCallback extends android.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onAttachFragment(android.app.Fragment);
     method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public android.view.View onFindViewById(int);
     method public abstract E onGetHost();
index 0cc763b..0fd49a7 100644 (file)
@@ -4581,6 +4581,7 @@ package android.app {
 
   public abstract class FragmentHostCallback extends android.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onAttachFragment(android.app.Fragment);
     method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public android.view.View onFindViewById(int);
     method public abstract E onGetHost();
index e79e20c..5fd9615 100644 (file)
@@ -6496,6 +6496,11 @@ public class Activity extends ContextThemeWrapper
             return (w == null) ? 0 : w.getAttributes().windowAnimations;
         }
 
+        @Override
+        public void onAttachFragment(Fragment fragment) {
+            Activity.this.onAttachFragment(fragment);
+        }
+
         @Nullable
         @Override
         public View onFindViewById(int id) {
index 91d810e..40c5c64 100644 (file)
@@ -1314,6 +1314,12 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
                     com.android.internal.R.styleable.Fragment_fragmentAllowReturnTransitionOverlap, true);
         }
         a.recycle();
+
+        final Activity hostActivity = mHost == null ? null : mHost.getActivity();
+        if (hostActivity != null) {
+            mCalled = false;
+            onInflate(hostActivity, attrs, savedInstanceState);
+        }
     }
 
     /**
index dad2c79..3e753f0 100644 (file)
@@ -23,7 +23,6 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.ArrayMap;
-import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
 
@@ -140,6 +139,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
         return mWindowAnimations;
     }
 
+    /**
+     * Called when a {@link Fragment} is being attached to this host, immediately
+     * after the call to its {@link Fragment#onAttach(Context)} method and before
+     * {@link Fragment#onCreate(Bundle)}.
+     */
+    public void onAttachFragment(Fragment fragment) {
+    }
+
     @Nullable
     @Override
     public View onFindViewById(int id) {
@@ -187,14 +194,6 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
         }
     }
 
-    void onFragmentInflate(Fragment fragment, AttributeSet attrs, Bundle savedInstanceState) {
-        fragment.onInflate(mContext, attrs, savedInstanceState);
-    }
-
-    void onFragmentAttach(Fragment fragment) {
-        fragment.onAttach(mContext);
-    }
-
     void doLoaderStart() {
         if (mLoadersStarted) {
             return;
index 62436e9..6b5239d 100644 (file)
@@ -844,13 +844,13 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
                     f.mFragmentManager = mParent != null
                             ? mParent.mChildFragmentManager : mHost.getFragmentManagerImpl();
                     f.mCalled = false;
-                    mHost.onFragmentAttach(f);
+                    f.onAttach(mHost.getContext());
                     if (!f.mCalled) {
                         throw new SuperNotCalledException("Fragment " + f
                                 + " did not call through to super.onAttach()");
                     }
                     if (f.mParentFragment == null) {
-                        mHost.onFragmentAttach(f);
+                        mHost.onAttachFragment(f);
                     }
 
                     if (!f.mRetaining) {
@@ -2107,7 +2107,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
             fragment.mTag = tag;
             fragment.mInLayout = true;
             fragment.mFragmentManager = this;
-            mHost.onFragmentInflate(fragment, attrs, fragment.mSavedFragmentState);
+            fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
             addFragment(fragment, true);
         } else if (fragment.mInLayout) {
             // A fragment already exists and it is not one we restored from
@@ -2124,7 +2124,7 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
             // from last saved state), then give it the attributes to
             // initialize itself.
             if (!fragment.mRetaining) {
-                mHost.onFragmentInflate(fragment, attrs, fragment.mSavedFragmentState);
+                fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
             }
         }