am 4426f643: Merge "Fix issue #3385839: Fragment.onCreateView is passing in activity..." into honeycomb

* commit '4426f643ec3833e830bc2f9b8af5088343de1315':
  Fix issue #3385839: Fragment.onCreateView is passing in activity...
This commit is contained in:
Dianne Hackborn
2011-01-25 14:08:10 -08:00
committed by Android Git Automerger
3 changed files with 52 additions and 14 deletions

View File

@@ -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) {

View File

@@ -849,6 +849,15 @@ public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
/**
* @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

View File

@@ -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);