Merge "Fix Fragment.onInflate() to actually work correctly." into honeycomb-mr1
This commit is contained in:
committed by
Android (Google) Code Review
commit
48f91e35c5
@ -30379,6 +30379,21 @@
|
||||
<parameter name="hidden" type="boolean">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="onInflate"
|
||||
return="void"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="attrs" type="android.util.AttributeSet">
|
||||
</parameter>
|
||||
<parameter name="savedInstanceState" type="android.os.Bundle">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="onInflate"
|
||||
return="void"
|
||||
abstract="false"
|
||||
@ -30389,6 +30404,8 @@
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="activity" type="android.app.Activity">
|
||||
</parameter>
|
||||
<parameter name="attrs" type="android.util.AttributeSet">
|
||||
</parameter>
|
||||
<parameter name="savedInstanceState" type="android.os.Bundle">
|
||||
@ -143820,6 +143837,21 @@
|
||||
<parameter name="key" type="java.lang.String">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getCharSequence"
|
||||
return="java.lang.CharSequence"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="key" type="java.lang.String">
|
||||
</parameter>
|
||||
<parameter name="defaultValue" type="java.lang.CharSequence">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getCharSequenceArray"
|
||||
return="java.lang.CharSequence[]"
|
||||
abstract="false"
|
||||
@ -144153,6 +144185,21 @@
|
||||
<parameter name="key" type="java.lang.String">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getString"
|
||||
return="java.lang.String"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="key" type="java.lang.String">
|
||||
</parameter>
|
||||
<parameter name="defaultValue" type="java.lang.String">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getStringArray"
|
||||
return="java.lang.String[]"
|
||||
abstract="false"
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -858,33 +858,58 @@ public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener
|
||||
return mActivity.getLayoutInflater();
|
||||
}
|
||||
|
||||
/**
|
||||
* @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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -1028,7 +1028,6 @@ public final class Bundle implements Parcelable, Cloneable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the value associated with the given key, or null if
|
||||
* no mapping of the desired type exists for the given key or a null
|
||||
@ -1051,6 +1050,28 @@ public final class Bundle implements Parcelable, Cloneable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value associated with the given key, or defaultValue if
|
||||
* no mapping of the desired type exists for the given key.
|
||||
*
|
||||
* @param key a String, or null
|
||||
* @param defaultValue Value to return if key does not exist
|
||||
* @return a String value, or null
|
||||
*/
|
||||
public String getString(String key, String defaultValue) {
|
||||
unparcel();
|
||||
Object o = mMap.get(key);
|
||||
if (o == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
try {
|
||||
return (String) o;
|
||||
} catch (ClassCastException e) {
|
||||
typeWarning(key, o, "String", e);
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value associated with the given key, or null if
|
||||
* no mapping of the desired type exists for the given key or a null
|
||||
@ -1073,6 +1094,28 @@ public final class Bundle implements Parcelable, Cloneable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value associated with the given key, or defaultValue if
|
||||
* no mapping of the desired type exists for the given key.
|
||||
*
|
||||
* @param key a String, or null
|
||||
* @param defaultValue Value to return if key does not exist
|
||||
* @return a CharSequence value, or null
|
||||
*/
|
||||
public CharSequence getCharSequence(String key, CharSequence defaultValue) {
|
||||
unparcel();
|
||||
Object o = mMap.get(key);
|
||||
if (o == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
try {
|
||||
return (CharSequence) o;
|
||||
} catch (ClassCastException e) {
|
||||
typeWarning(key, o, "CharSequence", e);
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value associated with the given key, or null if
|
||||
* no mapping of the desired type exists for the given key or a null
|
||||
|
@ -1860,8 +1860,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
});
|
||||
}
|
||||
mSwitchingDialog = mDialogBuilder.create();
|
||||
mSwitchingDialog.setCanceledOnTouchOutside(true);
|
||||
mSwitchingDialog.getWindow().setType(
|
||||
WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG);
|
||||
mSwitchingDialog.getWindow().getAttributes().setTitle("Select input method");
|
||||
mSwitchingDialog.show();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user