summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2011-01-24 23:58:13 -0800
committerDianne Hackborn <hackbod@google.com>2011-01-25 11:28:39 -0800
commit7187ccb93ee8adbb745fcbb901cfacfeed397a23 (patch)
treecc1a17e2e05e8b4898a3ff9f2f5978275d272412 /core/java/android
parent774f9be5dc02e8a7f742008872c6214e517cb8a3 (diff)
Fix issue #3385839: Fragment.onCreateView is passing in activity...
...context for a DialogFragment Change-Id: I434ebca64d2738da4c27321db8dbbded2cbe167d
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/DialogFragment.java53
-rw-r--r--core/java/android/app/Fragment.java9
-rw-r--r--core/java/android/app/FragmentManager.java4
3 files changed, 52 insertions, 14 deletions
diff --git a/core/java/android/app/DialogFragment.java b/core/java/android/app/DialogFragment.java
index 0bc89e722719..8bdd086eb466 100644
--- a/core/java/android/app/DialogFragment.java
+++ b/core/java/android/app/DialogFragment.java
@@ -16,6 +16,7 @@
package android.app;
+import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -340,8 +341,48 @@ public class DialogFragment extends Fragment
mShowsDialog = savedInstanceState.getBoolean(SAVED_SHOWS_DIALOG, mShowsDialog);
mBackStackId = savedInstanceState.getInt(SAVED_BACK_STACK_ID, -1);
}
+
}
+ /** @hide */
+ @Override
+ public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
+ if (!mShowsDialog) {
+ return super.getLayoutInflater(savedInstanceState);
+ }
+
+ mDialog = onCreateDialog(savedInstanceState);
+ mDestroyed = false;
+ switch (mStyle) {
+ case STYLE_NO_INPUT:
+ mDialog.getWindow().addFlags(
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
+ WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+ // fall through...
+ case STYLE_NO_FRAME:
+ case STYLE_NO_TITLE:
+ mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ }
+ return (LayoutInflater)mDialog.getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ /**
+ * Override to build your own custom Dialog container. This is typically
+ * used to show an AlertDialog instead of a generic Dialog; when doing so,
+ * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} does not need
+ * to be implemented since the AlertDialog takes care of its own content.
+ *
+ * <p>This method will be called after {@link #onCreate(Bundle)} and
+ * before {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. The
+ * default implementation simply instantiates and returns a {@link Dialog}
+ * class.
+ *
+ * @param savedInstanceState The last saved instance state of the Fragment,
+ * or null if this is a freshly created Fragment.
+ *
+ * @return Return a new Dialog instance to be displayed by the Fragment.
+ */
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), getTheme());
}
@@ -367,18 +408,6 @@ public class DialogFragment extends Fragment
return;
}
- mDialog = onCreateDialog(savedInstanceState);
- mDestroyed = false;
- switch (mStyle) {
- case STYLE_NO_INPUT:
- mDialog.getWindow().addFlags(
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
- WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
- // fall through...
- case STYLE_NO_FRAME:
- case STYLE_NO_TITLE:
- mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- }
View view = getView();
if (view != null) {
if (view.getParent() != null) {
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index b3d111aeb3e3..8982110ff0d5 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -850,6 +850,15 @@ public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener
}
/**
+ * @hide Hack so that DialogFragment can make its Dialog before creating
+ * its views, and the view construction can use the dialog's context for
+ * inflation. Maybe this should become a public API. Note sure.
+ */
+ public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
+ return mActivity.getLayoutInflater();
+ }
+
+ /**
* 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>
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 2c9c85b11df9..52b310840276 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -705,7 +705,7 @@ final class FragmentManagerImpl extends FragmentManager {
// For fragments that are part of the content view
// layout, we need to instantiate the view immediately
// and the inflater will take care of adding it.
- f.mView = f.onCreateView(mActivity.getLayoutInflater(),
+ f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState),
null, f.mSavedFragmentState);
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
@@ -727,7 +727,7 @@ final class FragmentManagerImpl extends FragmentManager {
}
}
f.mContainer = container;
- f.mView = f.onCreateView(mActivity.getLayoutInflater(),
+ f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState),
container, f.mSavedFragmentState);
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);