12dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/* 22dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 32dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 42dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 52dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * you may not use this file except in compliance with the License. 62dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * You may obtain a copy of the License at 72dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 82dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 92dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 102dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Unless required by applicable law or agreed to in writing, software 112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * See the License for the specific language governing permissions and 142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * limitations under the License. 152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornpackage android.app; 182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 19a18a86b43e40e3c15dcca0ae0148d641be9b25feChet Haaseimport android.animation.Animator; 20c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport android.content.ComponentCallbacks2; 21b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackbornimport android.content.Context; 226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackbornimport android.content.Intent; 232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.content.res.Configuration; 24bdd19bc338286e1042f59808545665a061e73ffcDianne Hackbornimport android.content.res.Resources; 252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.os.Bundle; 26b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcel; 27b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcelable; 28b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackbornimport android.util.AndroidRuntimeException; 29ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackbornimport android.util.AttributeSet; 30a2ea747faaf5fcd437afbaaf4085cfc29e7c16b8Dianne Hackbornimport android.util.DebugUtils; 3103fcc333cf0fbbc4df1215649746d6360801efd8Dianne Hackbornimport android.util.Log; 32b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.util.SparseArray; 335ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackbornimport android.view.ContextMenu; 34f0f5fffc6f578f531df7b208cfbfb53f884c0380Adam Powellimport android.view.ContextMenu.ContextMenuInfo; 352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.view.LayoutInflater; 36b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.Menu; 37b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuInflater; 38b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuItem; 392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.view.View; 405ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackbornimport android.view.View.OnCreateContextMenuListener; 41f0f5fffc6f578f531df7b208cfbfb53f884c0380Adam Powellimport android.view.ViewGroup; 425ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackbornimport android.widget.AdapterView; 432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 44625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.FileDescriptor; 45625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.PrintWriter; 46b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport java.util.HashMap; 47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class FragmentState implements Parcelable { 49b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final String mClassName; 506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn final int mIndex; 51b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final boolean mFromLayout; 52b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mFragmentId; 53b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mContainerId; 54b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final String mTag; 55b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final boolean mRetainInstance; 5616f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn final boolean mDetached; 57b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn final Bundle mArguments; 58b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 59b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle mSavedFragmentState; 60b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 61b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment mInstance; 62b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 63b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentState(Fragment frag) { 64b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mClassName = frag.getClass().getName(); 656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mIndex = frag.mIndex; 66b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFromLayout = frag.mFromLayout; 67b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragmentId = frag.mFragmentId; 68b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mContainerId = frag.mContainerId; 69b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTag = frag.mTag; 70b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRetainInstance = frag.mRetainInstance; 7116f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn mDetached = frag.mDetached; 72b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn mArguments = frag.mArguments; 73b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 74b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 75b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentState(Parcel in) { 76b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mClassName = in.readString(); 776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mIndex = in.readInt(); 78b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFromLayout = in.readInt() != 0; 79b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragmentId = in.readInt(); 80b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mContainerId = in.readInt(); 81b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTag = in.readString(); 82b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRetainInstance = in.readInt() != 0; 8316f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn mDetached = in.readInt() != 0; 84b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn mArguments = in.readBundle(); 85b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedFragmentState = in.readBundle(); 86b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 87b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 8862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn public Fragment instantiate(Activity activity, Fragment parent) { 89b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mInstance != null) { 90b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mInstance; 91b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 92b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 935164246d7e47b9c995ca1e1587f3056eb777f60bDianne Hackborn if (mArguments != null) { 945164246d7e47b9c995ca1e1587f3056eb777f60bDianne Hackborn mArguments.setClassLoader(activity.getClassLoader()); 955164246d7e47b9c995ca1e1587f3056eb777f60bDianne Hackborn } 965164246d7e47b9c995ca1e1587f3056eb777f60bDianne Hackborn 97b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn mInstance = Fragment.instantiate(activity, mClassName, mArguments); 98b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 99b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mSavedFragmentState != null) { 100b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedFragmentState.setClassLoader(activity.getClassLoader()); 101b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mInstance.mSavedFragmentState = mSavedFragmentState; 102b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 10362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mInstance.setIndex(mIndex, parent); 1046e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mInstance.mFromLayout = mFromLayout; 105352cc98b4621b76959af8f8a698fd75c6d6132e8Dianne Hackborn mInstance.mRestored = true; 106b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mInstance.mFragmentId = mFragmentId; 107b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mInstance.mContainerId = mContainerId; 108b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mInstance.mTag = mTag; 109b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mInstance.mRetainInstance = mRetainInstance; 11016f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn mInstance.mDetached = mDetached; 1113e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn mInstance.mFragmentManager = activity.mFragments; 11203fcc333cf0fbbc4df1215649746d6360801efd8Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(FragmentManagerImpl.TAG, 11303fcc333cf0fbbc4df1215649746d6360801efd8Dianne Hackborn "Instantiated fragment " + mInstance); 11403fcc333cf0fbbc4df1215649746d6360801efd8Dianne Hackborn 115b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mInstance; 116b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 117b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 118b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 119b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 120b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 121b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 122b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 123b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeString(mClassName); 1246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn dest.writeInt(mIndex); 125b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mFromLayout ? 1 : 0); 126b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mFragmentId); 127b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mContainerId); 128b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeString(mTag); 129b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mRetainInstance ? 1 : 0); 13016f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn dest.writeInt(mDetached ? 1 : 0); 131b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn dest.writeBundle(mArguments); 132b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeBundle(mSavedFragmentState); 133b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 134b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 135b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<FragmentState> CREATOR 136b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<FragmentState>() { 137b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentState createFromParcel(Parcel in) { 138b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentState(in); 139b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 140b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 141b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentState[] newArray(int size) { 142b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentState[size]; 143b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 144b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 145b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn} 146b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 1472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/** 1482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * A Fragment is a piece of an application's user interface or behavior 149291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * that can be placed in an {@link Activity}. Interaction with fragments 150291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * is done through {@link FragmentManager}, which can be obtained via 151291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@link Activity#getFragmentManager() Activity.getFragmentManager()} and 152291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@link Fragment#getFragmentManager() Fragment.getFragmentManager()}. 153291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 154291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>The Fragment class can be used many ways to achieve a wide variety of 1551b4e4b657cd730046b51d3cabdf1525d89637a4cfelipeal * results. In its core, it represents a particular operation or interface 156291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * that is running within a larger {@link Activity}. A Fragment is closely 157291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * tied to the Activity it is in, and can not be used apart from one. Though 158291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * Fragment defines its own lifecycle, that lifecycle is dependent on its 159291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * activity: if the activity is stopped, no fragments inside of it can be 160291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * started; when the activity is destroyed, all fragments will be destroyed. 161291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 162291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>All subclasses of Fragment must include a public empty constructor. 163291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * The framework will often re-instantiate a fragment class when needed, 164291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * in particular during state restore, and needs to be able to find this 165291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * constructor to instantiate it. If the empty constructor is not available, 166291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * a runtime exception will occur in some cases during state restore. 167291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 168291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Topics covered here: 169291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <ol> 170f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * <li><a href="#OlderPlatforms">Older Platforms</a> 171291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li><a href="#Lifecycle">Lifecycle</a> 172291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li><a href="#Layout">Layout</a> 173291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li><a href="#BackStack">Back Stack</a> 174291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * </ol> 175291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 176b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <div class="special reference"> 177b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <h3>Developer Guides</h3> 178b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <p>For more information about using fragments, read the 179b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p> 180b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * </div> 181b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * 182f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * <a name="OlderPlatforms"></a> 183f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * <h3>Older Platforms</h3> 184f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * 185f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * While the Fragment API was introduced in 186f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, a version of the API 1877871badd5d4d29d80207e9cc09a0681f26a151d0Dianne Hackborn * at is also available for use on older platforms through 1887871badd5d4d29d80207e9cc09a0681f26a151d0Dianne Hackborn * {@link android.support.v4.app.FragmentActivity}. See the blog post 189f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * <a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html"> 190f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * Fragments For All</a> for more details. 191f9dd34f4d3203fd50363b3b0247c5d0db6fe2c8fDianne Hackborn * 192291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <a name="Lifecycle"></a> 193291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <h3>Lifecycle</h3> 194291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 195291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Though a Fragment's lifecycle is tied to its owning activity, it has 196291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * its own wrinkle on the standard activity lifecycle. It includes basic 197291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * activity lifecycle methods such as {@link #onResume}, but also important 198291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * are methods related to interactions with the activity and UI generation. 199291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 200291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>The core series of lifecycle methods that are called to bring a fragment 201291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * up to resumed state (interacting with the user) are: 202291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 203291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <ol> 204291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onAttach} called once the fragment is associated with its activity. 205291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onCreate} called to do initial creation of the fragment. 206291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onCreateView} creates and returns the view hierarchy associated 207291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * with the fragment. 208291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onActivityCreated} tells the fragment that its activity has 2093790001c20494d1f355a67bec7751c4b8f07874fQuddus Chong * completed its own {@link Activity#onCreate Activity.onCreate()}. 21062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * <li> {@link #onViewStateRestored} tells the fragment that all of the saved 21162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * state of its view hierarchy has been restored. 212291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onStart} makes the fragment visible to the user (based on its 213291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * containing activity being started). 214291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onResume} makes the fragment interacting with the user (based on its 215291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * containing activity being resumed). 216291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * </ol> 217291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 218291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>As a fragment is no longer being used, it goes through a reverse 219291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * series of callbacks: 220291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 221291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <ol> 222291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onPause} fragment is no longer interacting with the user either 223291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * because its activity is being paused or a fragment operation is modifying it 224291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * in the activity. 225291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onStop} fragment is no longer visible to the user either 226291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * because its activity is being stopped or a fragment operation is modifying it 227291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * in the activity. 228291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onDestroyView} allows the fragment to clean up resources 229291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * associated with its View. 230291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onDestroy} called to do final cleanup of the fragment's state. 231291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li> {@link #onDetach} called immediately prior to the fragment no longer 232291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * being associated with its activity. 233291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * </ol> 234291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 235291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <a name="Layout"></a> 236291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <h3>Layout</h3> 237291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 238291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Fragments can be used as part of your application's layout, allowing 239291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * you to better modularize your code and more easily adjust your user 240291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * interface to the screen it is running on. As an example, we can look 241291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * at a simple program consisting of a list of items, and display of the 242291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * details of each item.</p> 243291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 244291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>An activity's layout XML can include <code><fragment></code> tags 245291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * to embed fragment instances inside of the layout. For example, here is 246625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * a simple layout that embeds one fragment:</p> 247291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 248291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout} 249291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 250291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>The layout is installed in the activity in the normal way:</p> 251291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 252291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java 253291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * main} 254291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 25587121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * <p>The titles fragment, showing a list of titles, is fairly simple, relying 256291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * on {@link ListFragment} for most of its work. Note the implementation of 25787121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * clicking an item: depending on the current activity's layout, it can either 25887121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * create and display a new fragment to show the details in-place (more about 259542f2409d9be9211dcb8cdfe2f863c22ff6cf26fBen Dodson * this later), or start a new activity to show the details.</p> 260291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 261291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java 262291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * titles} 263291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 264542f2409d9be9211dcb8cdfe2f863c22ff6cf26fBen Dodson * <p>The details fragment showing the contents of a selected item just 265291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * displays a string of text based on an index of a string array built in to 266291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * the app:</p> 267291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 268291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java 269291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * details} 270291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 271291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>In this case when the user clicks on a title, there is no details 272542f2409d9be9211dcb8cdfe2f863c22ff6cf26fBen Dodson * container in the current activity, so the titles fragment's click code will 273291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * launch a new activity to display the details fragment:</p> 274291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 275291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java 276291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * details_activity} 277291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 278291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>However the screen may be large enough to show both the list of titles 279291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * and details about the currently selected title. To use such a layout on 280291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * a landscape screen, this alternative layout can be placed under layout-land:</p> 281291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 282291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout} 283291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 28487121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * <p>Note how the prior code will adjust to this alternative UI flow: the titles 28587121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * fragment will now embed the details fragment inside of this activity, and the 28687121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * details activity will finish itself if it is running in a configuration 28787121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * where the details can be shown in-place. 288291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 289625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <p>When a configuration change causes the activity hosting these fragments 290625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * to restart, its new instance may use a different layout that doesn't 291625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * include the same fragments as the previous layout. In this case all of 292625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * the previous fragments will still be instantiated and running in the new 29387121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * instance. However, any that are no longer associated with a <fragment> 29487121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * tag in the view hierarchy will not have their content view created 29587121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * and will return false from {@link #isInLayout}. (The code here also shows 29687121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * how you can determine if a fragment placed in a container is no longer 29787121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * running in a layout with that container and avoid creating its view hierarchy 29887121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * in that case.) 299625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 300625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <p>The attributes of the <fragment> tag are used to control the 30187121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * LayoutParams provided when attaching the fragment's view to the parent 30287121accdb0ce318482ac51270763a6faab2ed63Dianne Hackborn * container. They can also be parsed by the fragment in {@link #onInflate} 303625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * as parameters. 304625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 305625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <p>The fragment being instantiated must have some kind of unique identifier 306625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * so that it can be re-associated with a previous instance if the parent 307625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * activity needs to be destroyed and recreated. This can be provided these 308625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * ways: 309625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 310625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <ul> 311625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <li>If nothing is explicitly supplied, the view ID of the container will 312625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * be used. 313625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <li><code>android:tag</code> can be used in <fragment> to provide 314625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * a specific tag name for the fragment. 315625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * <li><code>android:id</code> can be used in <fragment> to provide 316625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * a specific identifier for the fragment. 317625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * </ul> 318625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 319291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <a name="BackStack"></a> 320291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <h3>Back Stack</h3> 321291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 322291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>The transaction in which fragments are modified can be placed on an 323291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * internal back-stack of the owning activity. When the user presses back 324291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * in the activity, any transactions on the back stack are popped off before 325291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * the activity itself is finished. 326291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 327291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>For example, consider this simple fragment that is instantiated with 328291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * an integer argument and displays that in a TextView in its UI:</p> 329291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 330291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java 331291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * fragment} 332291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 333291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>A function that creates a new instance of the fragment, replacing 334291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * whatever current fragment instance is being shown and pushing that change 335291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * on to the back stack could be written as: 336291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 337291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java 338291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * add_stack} 339291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 340291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>After each call to this function, a new entry is on the stack, and 341291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * pressing back will pop it to return the user to whatever previous state 342291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * the activity UI was in. 3432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 344c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornpublic class Fragment implements ComponentCallbacks2, OnCreateContextMenuListener { 345c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn private static final HashMap<String, Class<?>> sClassMap = 346c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn new HashMap<String, Class<?>>(); 347b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 348635c60af623c73d2409f5729c0953638b5d6c497Adam Powell static final int INVALID_STATE = -1; // Invalid state used as a null value. 349c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn static final int INITIALIZING = 0; // Not yet created. 350c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn static final int CREATED = 1; // Created. 351c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn static final int ACTIVITY_CREATED = 2; // The activity has finished its creation. 35216f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn static final int STOPPED = 3; // Fully created, not started. 35316f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn static final int STARTED = 4; // Created and started, not resumed. 35416f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn static final int RESUMED = 5; // Created started and resumed. 3552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 3562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn int mState = INITIALIZING; 357b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 358d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn // Non-null if the fragment's view hierarchy is currently animating away, 359d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn // meaning we need to wait a bit on completely destroying it. This is the 360d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn // animation that is running. 361d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn Animator mAnimatingAway; 362d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn 363d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn // If mAnimatingAway != null, this is the state we should move to once the 364d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn // animation is done. 365d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn int mStateAfterAnimating; 366d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn 367b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // When instantiated from saved state, this is the saved state. 368b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle mSavedFragmentState; 369b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn SparseArray<Parcelable> mSavedViewState; 370b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 3716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Index into active fragment array. 3726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn int mIndex = -1; 3736e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Internal unique name for this fragment; 3756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn String mWho; 3766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 377b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // Construction arguments; 378b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn Bundle mArguments; 379b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 380def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // Target fragment. 381def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn Fragment mTarget; 382def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 383f930232fd1c8d301d91853c8fe5dca43979ac807Dianne Hackborn // For use when retaining a fragment: this is the index of the last mTarget. 384f930232fd1c8d301d91853c8fe5dca43979ac807Dianne Hackborn int mTargetIndex = -1; 385f930232fd1c8d301d91853c8fe5dca43979ac807Dianne Hackborn 386def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // Target request code. 387def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn int mTargetRequestCode; 388def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 3896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // True if the fragment is in the list of added fragments. 3906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn boolean mAdded; 3916e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3925d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn // If set this fragment is being removed from its activity. 3935d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn boolean mRemoving; 3945d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn 3952707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn // True if the fragment is in the resumed state. 3962707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn boolean mResumed; 3972707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn 398b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Set to true if this fragment was instantiated from a layout file. 399b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mFromLayout; 400b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 401625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // Set to true when the view has actually been inflated in its layout. 402625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn boolean mInLayout; 403625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 404352cc98b4621b76959af8f8a698fd75c6d6132e8Dianne Hackborn // True if this fragment has been restored from previously saved state. 405352cc98b4621b76959af8f8a698fd75c6d6132e8Dianne Hackborn boolean mRestored; 406352cc98b4621b76959af8f8a698fd75c6d6132e8Dianne Hackborn 407b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Number of active back stack entries this fragment is in. 408f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int mBackStackNesting; 409b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 4103e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn // The fragment manager we are associated with. Set as soon as the 4113e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn // fragment is used in a transaction; cleared after it has been removed 4123e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn // from all transactions. 413635c60af623c73d2409f5729c0953638b5d6c497Adam Powell FragmentManagerImpl mFragmentManager; 4143e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn 415b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Activity this fragment is attached to. 4162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn Activity mActivity; 41762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 41862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn // Private fragment manager for child fragments inside of this one. 41962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn FragmentManagerImpl mChildFragmentManager; 42062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 42162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn // If this Fragment is contained in another Fragment, this is that container. 42262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn Fragment mParentFragment; 42362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 424b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // The optional identifier for this fragment -- either the container ID if it 425b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // was dynamically added to the view hierarchy, or the ID supplied in 426b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // layout. 427b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mFragmentId; 428b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 429b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // When a fragment is being dynamically added to the view hierarchy, this 430b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // is the identifier of the parent container it is being added to. 4312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn int mContainerId; 4322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 433b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // The optional named tag for this fragment -- usually used to find 434b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // fragments that are not part of the layout. 435b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn String mTag; 436b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 4375ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // Set to true when the app has requested that this fragment be hidden 4385ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // from the user. 4395ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn boolean mHidden; 4405ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 44116f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn // Set to true when the app has requested that this fragment be detached. 44216f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn boolean mDetached; 44316f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn 444b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // If set this fragment would like its instance retained across 445b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // configuration changes. 446b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mRetainInstance; 447b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 448b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // If set this fragment is being retained across the current config change. 449b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mRetaining; 450b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 451b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn // If set this fragment has menu items to contribute. 452b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean mHasMenu; 4536c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn 4546c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn // Set to true to allow the fragment's menu to be shown. 4556c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn boolean mMenuVisible = true; 4566c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn 457b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Used to verify that subclasses call through to super class. 458b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mCalled; 459b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 4605ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // If app has requested a specific animation, this is the one to use. 4615ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn int mNextAnim; 4625ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 463b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // The parent container of the fragment after dynamically added to UI. 4642dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn ViewGroup mContainer; 465b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 466b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // The View generated for this fragment. 4672dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn View mView; 4682dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 469635c60af623c73d2409f5729c0953638b5d6c497Adam Powell // Whether this fragment should defer starting until after other fragments 470635c60af623c73d2409f5729c0953638b5d6c497Adam Powell // have been started and their loaders are finished. 471635c60af623c73d2409f5729c0953638b5d6c497Adam Powell boolean mDeferStart; 472635c60af623c73d2409f5729c0953638b5d6c497Adam Powell 47378fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell // Hint provided by the app that this fragment is currently visible to the user. 47478fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell boolean mUserVisibleHint = true; 47578fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell 4764911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl mLoaderManager; 477fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn boolean mLoadersStarted; 4785e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn boolean mCheckedForLoaderManager; 479c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 480c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 481b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * State information that has been retrieved from a fragment instance 482b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * through {@link FragmentManager#saveFragmentInstanceState(Fragment) 483b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * FragmentManager.saveFragmentInstanceState}. 484b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn */ 485b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public static class SavedState implements Parcelable { 486b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn final Bundle mState; 487b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 488b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn SavedState(Bundle state) { 489b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn mState = state; 490b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 491b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 492b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn SavedState(Parcel in, ClassLoader loader) { 493b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn mState = in.readBundle(); 494b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn if (loader != null && mState != null) { 495b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn mState.setClassLoader(loader); 496b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 497b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 498b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 499b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn @Override 500b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public int describeContents() { 501b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn return 0; 502b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 503b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 504b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn @Override 505b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 506b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn dest.writeBundle(mState); 507b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 508b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 509b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public static final Parcelable.ClassLoaderCreator<SavedState> CREATOR 510b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn = new Parcelable.ClassLoaderCreator<SavedState>() { 511b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public SavedState createFromParcel(Parcel in) { 512b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn return new SavedState(in, null); 513b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 514b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 515b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public SavedState createFromParcel(Parcel in, ClassLoader loader) { 516b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn return new SavedState(in, loader); 517b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 518b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 519b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public SavedState[] newArray(int size) { 520b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn return new SavedState[size]; 521b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 522b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn }; 523b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 524b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 525b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn /** 526b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Thrown by {@link Fragment#instantiate(Context, String, Bundle)} when 527b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * there is an instantiation failure. 528b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 529b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn static public class InstantiationException extends AndroidRuntimeException { 530b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn public InstantiationException(String msg, Exception cause) { 531b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn super(msg, cause); 532b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 533b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 534b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 535b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn /** 536291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * Default constructor. <strong>Every</strong> fragment must have an 537c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * empty constructor, so it can be instantiated when restoring its 538c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * activity's state. It is strongly recommended that subclasses do not 539c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * have other constructors with parameters, since these constructors 540c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * will not be called when the fragment is re-instantiated; instead, 541b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * arguments can be supplied by the caller with {@link #setArguments} 542b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * and later retrieved by the Fragment with {@link #getArguments}. 543b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * 544291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Applications should generally not implement a constructor. The 545291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * first place application code an run where the fragment is ready to 546291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * be used is in {@link #onAttach(Activity)}, the point where the fragment 547291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * is actually associated with its activity. Some applications may also 548291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * want to implement {@link #onInflate} to retrieve attributes from a 549291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * layout resource, though should take care here because this happens for 550291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * the fragment is attached to its activity. 551c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 5522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public Fragment() { 5532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 554b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 555b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn /** 556b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Like {@link #instantiate(Context, String, Bundle)} but with a null 557b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * argument Bundle. 558b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 559b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn public static Fragment instantiate(Context context, String fname) { 560b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return instantiate(context, fname, null); 561b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 562b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 563b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn /** 564b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * Create a new instance of a Fragment with the given class name. This is 565b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * the same as calling its empty constructor. 566b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * 567b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * @param context The calling context being used to instantiate the fragment. 568b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * This is currently just used to get its ClassLoader. 569b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * @param fname The class name of the fragment to instantiate. 570b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * @param args Bundle of arguments to supply to the fragment, which it 571b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * can retrieve with {@link #getArguments()}. May be null. 572b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn * @return Returns a new fragment instance. 573b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * @throws InstantiationException If there is a failure in instantiating 574b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * the given fragment class. This is a runtime exception; it is not 575b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * normally expected to happen. 576b1ad5977bc8178b6d350ebe9099daded4c1ef603Dianne Hackborn */ 577b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn public static Fragment instantiate(Context context, String fname, Bundle args) { 578b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn try { 579b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn Class<?> clazz = sClassMap.get(fname); 580b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (clazz == null) { 581b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // Class not found in the cache, see if it's real, and try to add it 582b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn clazz = context.getClassLoader().loadClass(fname); 583b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn sClassMap.put(fname, clazz); 584b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 585b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn Fragment f = (Fragment)clazz.newInstance(); 586b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (args != null) { 587b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn args.setClassLoader(f.getClass().getClassLoader()); 588b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn f.mArguments = args; 589b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 590b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return f; 591b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } catch (ClassNotFoundException e) { 592b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new InstantiationException("Unable to instantiate fragment " + fname 593b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + ": make sure class name exists, is public, and has an" 594b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " empty constructor that is public", e); 595b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } catch (java.lang.InstantiationException e) { 596b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new InstantiationException("Unable to instantiate fragment " + fname 597b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + ": make sure class name exists, is public, and has an" 598b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " empty constructor that is public", e); 599b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } catch (IllegalAccessException e) { 600b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new InstantiationException("Unable to instantiate fragment " + fname 601b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + ": make sure class name exists, is public, and has an" 602b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " empty constructor that is public", e); 603b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 604b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 605b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 60662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn final void restoreViewState(Bundle savedInstanceState) { 607b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mSavedViewState != null) { 608b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mView.restoreHierarchyState(mSavedViewState); 609b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedViewState = null; 610b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 61162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 61262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onViewStateRestored(savedInstanceState); 61362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 61462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 61562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onViewStateRestored()"); 61662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 617b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 6181b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 61962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn final void setIndex(int index, Fragment parent) { 6206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mIndex = index; 62162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (parent != null) { 62262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mWho = parent.mWho + ":" + mIndex; 62362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } else { 62462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mWho = "android:fragment:" + mIndex; 62562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 6261b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 6271b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 62816f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn final boolean isInBackStack() { 62916f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn return mBackStackNesting > 0; 63016f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn } 63116f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn 632b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 633b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Subclasses can not override equals(). 634b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 635b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn @Override final public boolean equals(Object o) { 636b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return super.equals(o); 637b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 638b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 639b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 640b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Subclasses can not override hashCode(). 641b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 642b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn @Override final public int hashCode() { 643b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return super.hashCode(); 644b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 6452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 6465ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn @Override 6475ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn public String toString() { 6485ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn StringBuilder sb = new StringBuilder(128); 649a2ea747faaf5fcd437afbaaf4085cfc29e7c16b8Dianne Hackborn DebugUtils.buildShortClassTag(this, sb); 6505ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (mIndex >= 0) { 6515ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(" #"); 6525ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(mIndex); 6535ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 6545ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (mFragmentId != 0) { 6555ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(" id=0x"); 6565ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(Integer.toHexString(mFragmentId)); 6575ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 6585ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (mTag != null) { 6595ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(" "); 6605ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append(mTag); 6615ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 6625ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn sb.append('}'); 6635ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return sb.toString(); 6645ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 6655ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 666b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 667b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Return the identifier this fragment is known by. This is either 668b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * the android:id value supplied in a layout or the container view ID 669b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * supplied when adding the fragment. 670b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 671b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public int getId() { 672b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mFragmentId; 673b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 674b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 675b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 676b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Get the tag name of the fragment, if specified. 677b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 678b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public String getTag() { 679b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mTag; 680b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 681b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 682b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 683b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Supply the construction arguments for this fragment. This can only 684b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * be called before the fragment has been attached to its activity; that 685b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * is, you should call it immediately after constructing the fragment. The 686b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * arguments supplied here will be retained across fragment destroy and 687b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * creation. 688b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 689def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn public void setArguments(Bundle args) { 690b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (mIndex >= 0) { 691b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new IllegalStateException("Fragment already active"); 692b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 693b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn mArguments = args; 694b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 695b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 696b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn /** 697b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Return the arguments supplied when the fragment was instantiated, 698b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * if any. 699b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 700b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn final public Bundle getArguments() { 701b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return mArguments; 702b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 703b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 704b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn /** 705b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * Set the initial saved state that this Fragment should restore itself 706b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * from when first being constructed, as returned by 707b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * {@link FragmentManager#saveFragmentInstanceState(Fragment) 708b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * FragmentManager.saveFragmentInstanceState}. 709b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * 710b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn * @param state The state the fragment should be restored from. 711b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn */ 712b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn public void setInitialSavedState(SavedState state) { 713b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn if (mIndex >= 0) { 714b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn throw new IllegalStateException("Fragment already active"); 715b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 716b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn mSavedFragmentState = state != null && state.mState != null 717b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn ? state.mState : null; 718b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn } 719b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn 720b46ed7636be9341b6ce0b158b3d86f34a437e6daDianne Hackborn /** 721def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * Optional target for this fragment. This may be used, for example, 722def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * if this fragment is being started by another, and when done wants to 723def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * give a result back to the first. The target set here is retained 724def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * across instances via {@link FragmentManager#putFragment 725def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * FragmentManager.putFragment()}. 726def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * 727def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * @param fragment The fragment that is the target of this one. 728def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * @param requestCode Optional request code, for convenience if you 729def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * are going to call back with {@link #onActivityResult(int, int, Intent)}. 730def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn */ 731def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn public void setTargetFragment(Fragment fragment, int requestCode) { 732def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn mTarget = fragment; 733def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn mTargetRequestCode = requestCode; 734def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 735def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 736def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn /** 7373f00be5bd0b46e7937b68909baeff295b86215ccDianne Hackborn * Return the target fragment set by {@link #setTargetFragment}. 738def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn */ 739def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn final public Fragment getTargetFragment() { 740def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn return mTarget; 741def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 742def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 743def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn /** 7443f00be5bd0b46e7937b68909baeff295b86215ccDianne Hackborn * Return the target request code set by {@link #setTargetFragment}. 745def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn */ 746def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn final public int getTargetRequestCode() { 747def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn return mTargetRequestCode; 748def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 749def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn 750def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn /** 751b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Return the Activity this fragment is currently associated with. 752b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 753b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public Activity getActivity() { 7542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn return mActivity; 7552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 7562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 757b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 758bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * Return <code>getActivity().getResources()</code>. 759bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn */ 760bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn final public Resources getResources() { 7615d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn if (mActivity == null) { 7625d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn throw new IllegalStateException("Fragment " + this + " not attached to Activity"); 7635d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn } 764bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn return mActivity.getResources(); 765bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn } 766bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn 767bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn /** 768bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * Return a localized, styled CharSequence from the application's package's 769bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * default string table. 770bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * 771bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * @param resId Resource id for the CharSequence text 772bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn */ 773bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn public final CharSequence getText(int resId) { 774bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn return getResources().getText(resId); 775bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn } 776bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn 777bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn /** 778bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * Return a localized string from the application's package's 779bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * default string table. 780bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * 781bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * @param resId Resource id for the string 782bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn */ 783bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn public final String getString(int resId) { 784bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn return getResources().getString(resId); 785bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn } 786bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn 787bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn /** 788bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * Return a localized formatted string from the application's package's 789bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * default string table, substituting the format arguments as defined in 790bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * {@link java.util.Formatter} and {@link java.lang.String#format}. 791bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * 792bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * @param resId Resource id for the format string 793bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn * @param formatArgs The format arguments that will be used for substitution. 794bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn */ 795bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn 796bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn public final String getString(int resId, Object... formatArgs) { 797bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn return getResources().getString(resId, formatArgs); 798bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn } 799bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn 800bdd19bc338286e1042f59808545665a061e73ffcDianne Hackborn /** 801b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Return the FragmentManager for interacting with fragments associated 8023e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn * with this fragment's activity. Note that this will be non-null slightly 803625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * before {@link #getActivity()}, during the time from when the fragment is 8043e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn * placed in a {@link FragmentTransaction} until it is committed and 8053e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn * attached to its activity. 80662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * 80762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * <p>If this Fragment is a child of another Fragment, the FragmentManager 80862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * returned here will be the parent's {@link #getChildFragmentManager()}. 809b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 810b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn final public FragmentManager getFragmentManager() { 8113e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn return mFragmentManager; 812b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 813b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 814b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn /** 81562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * Return a private FragmentManager for placing and managing Fragments 81662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * inside of this Fragment. 81762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn */ 81862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn final public FragmentManager getChildFragmentManager() { 81962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager == null) { 82062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn instantiateChildFragmentManager(); 82162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mState >= RESUMED) { 82262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchResume(); 82362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } else if (mState >= STARTED) { 82462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchStart(); 82562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } else if (mState >= ACTIVITY_CREATED) { 82662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchActivityCreated(); 82762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } else if (mState >= CREATED) { 82862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchCreate(); 82962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 83062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 83162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return mChildFragmentManager; 83262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 83362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 83462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn /** 8351b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * Returns the parent Fragment containing this Fragment. If this Fragment 8361b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * is attached directly to an Activity, returns null. 8371b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn */ 8381b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn final public Fragment getParentFragment() { 8391b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn return mParentFragment; 8401b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 8411b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 8421b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn /** 8435ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * Return true if the fragment is currently added to its activity. 8445ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn */ 845b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public boolean isAdded() { 8465d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn return mActivity != null && mAdded; 8475d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn } 8485d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn 8495d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn /** 850afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * Return true if the fragment has been explicitly detached from the UI. 851afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * That is, {@link FragmentTransaction#detach(Fragment) 852afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * FragmentTransaction.detach(Fragment)} has been used on it. 853afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn */ 854afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn final public boolean isDetached() { 855afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn return mDetached; 856afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 857afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn 858afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn /** 8595d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * Return true if this fragment is currently being removed from its 8605d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * activity. This is <em>not</em> whether its activity is finishing, but 8615d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn * rather whether it is in the process of being removed from its activity. 8625d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn */ 8635d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn final public boolean isRemoving() { 8645d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn return mRemoving; 8655ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 8665ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 8675ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn /** 868625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Return true if the layout is included as part of an activity view 869625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * hierarchy via the <fragment> tag. This will always be true when 870625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * fragments are created through the <fragment> tag, <em>except</em> 871625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * in the case where an old fragment is restored from a previous state and 872625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * it does not appear in the layout of the current state. 873625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 874625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn final public boolean isInLayout() { 875625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn return mInLayout; 876625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 877625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 878625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 8792707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn * Return true if the fragment is in the resumed state. This is true 8802707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn * for the duration of {@link #onResume()} and {@link #onPause()} as well. 8812707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn */ 8822707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn final public boolean isResumed() { 8832707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn return mResumed; 8842707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 8852707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn 8862707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn /** 8875ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * Return true if the fragment is currently visible to the user. This means 8885ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * it: (1) has been added, (2) has its view attached to the window, and 8895ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * (3) is not hidden. 8905ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn */ 891b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public boolean isVisible() { 8925ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return isAdded() && !isHidden() && mView != null 8935ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn && mView.getWindowToken() != null && mView.getVisibility() == View.VISIBLE; 8945ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 8955ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 8965ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn /** 8975ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * Return true if the fragment has been hidden. By default fragments 8985ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * are shown. You can find out about changes to this state with 899cddfa6de1fcf1a9480d4c9b575102909bd8f2067Dianne Hackborn * {@link #onHiddenChanged}. Note that the hidden state is orthogonal 9005ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * to other states -- that is, to be visible to the user, a fragment 9015ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * must be both started and not hidden. 9025ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn */ 903b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public boolean isHidden() { 9045ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return mHidden; 9055ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 9065ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 9075ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn /** 9085ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * Called when the hidden state (as returned by {@link #isHidden()} of 9095ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * the fragment has changed. Fragments start out not hidden; this will 9105ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * be called whenever the fragment changes state from that. 9115ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * @param hidden True if the fragment is now hidden, false if it is not 9125ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn * visible. 9135ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn */ 9145ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn public void onHiddenChanged(boolean hidden) { 9155ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 9165ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 9175ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn /** 918b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Control whether a fragment instance is retained across Activity 919b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * re-creation (such as from a configuration change). This can only 920b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * be used with fragments not in the back stack. If set, the fragment 921b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * lifecycle will be slightly different when an activity is recreated: 922b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * <ul> 923b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * <li> {@link #onDestroy()} will not be called (but {@link #onDetach()} still 924b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * will be, because the fragment is being detached from its current activity). 925b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * <li> {@link #onCreate(Bundle)} will not be called since the fragment 926b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * is not being re-created. 927c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * <li> {@link #onAttach(Activity)} and {@link #onActivityCreated(Bundle)} <b>will</b> 928b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * still be called. 929b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * </ul> 930b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 931b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void setRetainInstance(boolean retain) { 93262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (retain && mParentFragment != null) { 93362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new IllegalStateException( 93462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn "Can't retain fragements that are nested in other fragments"); 93562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 936b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRetainInstance = retain; 937b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 938b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 939b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn final public boolean getRetainInstance() { 940b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mRetainInstance; 941b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 942b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 943b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 944b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * Report that this fragment would like to participate in populating 9454dc643eb6749afe5211198c920e739475590f92cWink Saville * the options menu by receiving a call to {@link #onCreateOptionsMenu} 946b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * and related methods. 947b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 948b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @param hasMenu If true, the fragment has menu items to contribute. 949b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 950b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void setHasOptionsMenu(boolean hasMenu) { 951b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (mHasMenu != hasMenu) { 952b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mHasMenu = hasMenu; 953f0f5fffc6f578f531df7b208cfbfb53f884c0380Adam Powell if (isAdded() && !isHidden()) { 954f0f5fffc6f578f531df7b208cfbfb53f884c0380Adam Powell mFragmentManager.invalidateOptionsMenu(); 955b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 956b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 957b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 9586c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn 9596c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn /** 9606c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * Set a hint for whether this fragment's menu should be visible. This 9616c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * is useful if you know that a fragment has been placed in your view 9626c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * hierarchy so that the user can not currently seen it, so any menu items 9636c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * it has should also not be shown. 9646c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * 9656c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * @param menuVisible The default is true, meaning the fragment's menu will 9666c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn * be shown as usual. If false, the user will not see the menu. 9676c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn */ 9686c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn public void setMenuVisibility(boolean menuVisible) { 9696c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn if (mMenuVisible != menuVisible) { 9706c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn mMenuVisible = menuVisible; 9716c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn if (mHasMenu && isAdded() && !isHidden()) { 9726c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn mFragmentManager.invalidateOptionsMenu(); 9736c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn } 9746c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn } 9756c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn } 9766c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn 977b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 97878fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * Set a hint to the system about whether this fragment's UI is currently visible 97978fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * to the user. This hint defaults to true and is persistent across fragment instance 98078fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * state save and restore. 981635c60af623c73d2409f5729c0953638b5d6c497Adam Powell * 98278fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * <p>An app may set this to false to indicate that the fragment's UI is 98378fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * scrolled out of visibility or is otherwise not directly visible to the user. 98478fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * This may be used by the system to prioritize operations such as fragment lifecycle updates 98578fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * or loader ordering behavior.</p> 986635c60af623c73d2409f5729c0953638b5d6c497Adam Powell * 98778fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * @param isVisibleToUser true if this fragment's UI is currently visible to the user (default), 98878fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * false if it is not. 989635c60af623c73d2409f5729c0953638b5d6c497Adam Powell */ 99078fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell public void setUserVisibleHint(boolean isVisibleToUser) { 99178fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell if (!mUserVisibleHint && isVisibleToUser && mState < STARTED) { 992635c60af623c73d2409f5729c0953638b5d6c497Adam Powell mFragmentManager.performPendingDeferredStart(this); 993635c60af623c73d2409f5729c0953638b5d6c497Adam Powell } 99478fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell mUserVisibleHint = isVisibleToUser; 99578fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell mDeferStart = !isVisibleToUser; 996635c60af623c73d2409f5729c0953638b5d6c497Adam Powell } 997635c60af623c73d2409f5729c0953638b5d6c497Adam Powell 998635c60af623c73d2409f5729c0953638b5d6c497Adam Powell /** 99978fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * @return The current value of the user-visible hint on this fragment. 100078fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell * @see #setUserVisibleHint(boolean) 1001635c60af623c73d2409f5729c0953638b5d6c497Adam Powell */ 100278fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell public boolean getUserVisibleHint() { 100378fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell return mUserVisibleHint; 1004635c60af623c73d2409f5729c0953638b5d6c497Adam Powell } 1005635c60af623c73d2409f5729c0953638b5d6c497Adam Powell 1006635c60af623c73d2409f5729c0953638b5d6c497Adam Powell /** 1007c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Return the LoaderManager for this fragment, creating it if needed. 1008c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 1009c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public LoaderManager getLoaderManager() { 1010c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mLoaderManager != null) { 1011c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 1012c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 10135d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn if (mActivity == null) { 10145d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn throw new IllegalStateException("Fragment " + this + " not attached to Activity"); 10155d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn } 10165e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mCheckedForLoaderManager = true; 101762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, true); 1018c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 1019c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 1020a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 1021c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 10226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * Call {@link Activity#startActivity(Intent)} on the fragment's 10236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * containing Activity. 10247a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * 10257a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * @param intent The intent to start. 10266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn */ 10276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public void startActivity(Intent intent) { 1028a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivity(intent, null); 1029a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 1030a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 1031a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 1032a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Call {@link Activity#startActivity(Intent, Bundle)} on the fragment's 1033a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * containing Activity. 10347a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * 10357a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * @param intent The intent to start. 10367a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * @param options Additional options for how the Activity should be started. 10377a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 10387a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 1039a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 1040a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivity(Intent intent, Bundle options) { 10415d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn if (mActivity == null) { 10425d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn throw new IllegalStateException("Fragment " + this + " not attached to Activity"); 10435d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn } 1044a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (options != null) { 1045a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mActivity.startActivityFromFragment(this, intent, -1, options); 1046a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else { 1047a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this call for compatibility with 1048a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // applications that may have overridden the method. 1049a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mActivity.startActivityFromFragment(this, intent, -1); 1050a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 10516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 1052a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 10536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn /** 10546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * Call {@link Activity#startActivityForResult(Intent, int)} on the fragment's 10556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * containing Activity. 10566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn */ 10576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public void startActivityForResult(Intent intent, int requestCode) { 1058a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivityForResult(intent, requestCode, null); 1059a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 1060a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 1061a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 1062a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Call {@link Activity#startActivityForResult(Intent, int, Bundle)} on the fragment's 1063a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * containing Activity. 1064a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 1065a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivityForResult(Intent intent, int requestCode, Bundle options) { 10665d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn if (mActivity == null) { 10675d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn throw new IllegalStateException("Fragment " + this + " not attached to Activity"); 10685d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn } 1069a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (options != null) { 1070a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mActivity.startActivityFromFragment(this, intent, requestCode, options); 1071a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else { 1072a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this call for compatibility with 1073a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // applications that may have overridden the method. 1074a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mActivity.startActivityFromFragment(this, intent, requestCode, options); 1075a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 10766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 10776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 10786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn /** 10796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * Receive the result from a previous call to 10806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * {@link #startActivityForResult(Intent, int)}. This follows the 10816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * related Activity API as described there in 10826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * {@link Activity#onActivityResult(int, int, Intent)}. 10836e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 10846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param requestCode The integer request code originally supplied to 10856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * startActivityForResult(), allowing you to identify who this 10866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * result came from. 10876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param resultCode The integer result code returned by the child activity 10886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * through its setResult(). 10896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param data An Intent, which can return result data to the caller 10906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * (various data can be attached to Intent "extras"). 10916e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn */ 10926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public void onActivityResult(int requestCode, int resultCode, Intent data) { 10936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 10946e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 10956e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn /** 10967187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn * @hide Hack so that DialogFragment can make its Dialog before creating 10977187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn * its views, and the view construction can use the dialog's context for 10987187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn * inflation. Maybe this should become a public API. Note sure. 10997187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn */ 11007187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn public LayoutInflater getLayoutInflater(Bundle savedInstanceState) { 11017187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn return mActivity.getLayoutInflater(); 11027187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn } 11037187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn 11047187ccb93ee8adbb745fcbb901cfacfeed397a23Dianne Hackborn /** 1105e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * @deprecated Use {@link #onInflate(Activity, AttributeSet, Bundle)} instead. 1106e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn */ 1107e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn @Deprecated 1108e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn public void onInflate(AttributeSet attrs, Bundle savedInstanceState) { 1109e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn mCalled = true; 1110e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn } 1111e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn 1112e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn /** 1113b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when a fragment is being created as part of a view layout 11146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * inflation, typically from setting the content view of an activity. This 1115e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * may be called immediately after the fragment is created from a <fragment> 1116def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * tag in a layout file. Note this is <em>before</em> the fragment's 1117def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * {@link #onAttach(Activity)} has been called; all you should do here is 1118e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * parse the attributes and save them away. 11196e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 1120def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * <p>This is called every time the fragment is inflated, even if it is 1121e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * being inflated into a new instance with saved state. It typically makes 1122e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * sense to re-parse the parameters each time, to allow them to change with 1123e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * different configurations.</p> 1124e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1125e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * <p>Here is a typical implementation of a fragment that can take parameters 1126e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * both through attributes supplied here as well from {@link #getArguments()}:</p> 1127e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1128e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java 1129e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * fragment} 1130e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1131e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * <p>Note that parsing the XML attributes uses a "styleable" resource. The 1132e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * declaration for the styleable used here is:</p> 1133e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1134e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * {@sample development/samples/ApiDemos/res/values/attrs.xml fragment_arguments} 1135b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * 1136e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * <p>The fragment can then be declared within its activity's content layout 1137e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * through a tag like this:</p> 1138e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1139e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * {@sample development/samples/ApiDemos/res/layout/fragment_arguments.xml from_attributes} 1140e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1141e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * <p>This fragment can also be created dynamically from arguments given 1142e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * at runtime in the arguments Bundle; here is an example of doing so at 1143e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * creation of the containing activity:</p> 1144e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1145e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentArguments.java 1146e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * create} 1147e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * 1148e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn * @param activity The Activity that is inflating this fragment. 1149b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param attrs The attributes at the tag where the fragment is 1150b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * being created. 11516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param savedInstanceState If the fragment is being re-created from 11526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * a previous saved state, this is the state. 1153b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 1154e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { 1155e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn onInflate(attrs, savedInstanceState); 1156ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn mCalled = true; 1157ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 1158ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 1159b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1160b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when a fragment is first attached to its activity. 1161b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * {@link #onCreate(Bundle)} will be called after this. 1162b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 11632dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onAttach(Activity activity) { 11642dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 11652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 11662dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1167811ed1065f39469cf2cf6adba22cab397ed88d5eChet Haase /** 1168811ed1065f39469cf2cf6adba22cab397ed88d5eChet Haase * Called when a fragment loads an animation. 1169811ed1065f39469cf2cf6adba22cab397ed88d5eChet Haase */ 1170a18a86b43e40e3c15dcca0ae0148d641be9b25feChet Haase public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { 1171f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 1172f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 1173f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 1174b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1175b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called to do initial creation of a fragment. This is called after 1176c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * {@link #onAttach(Activity)} and before 1177c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. 1178c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * 1179c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * <p>Note that this can be called while the fragment's activity is 1180c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * still in the process of being created. As such, you can not rely 1181c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * on things like the activity's content view hierarchy being initialized 1182c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * at this point. If you want to do work once the activity itself is 1183c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * created, see {@link #onActivityCreated(Bundle)}. 1184c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * 1185b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param savedInstanceState If the fragment is being re-created from 1186b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * a previous saved state, this is the state. 1187b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 11882dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onCreate(Bundle savedInstanceState) { 11892dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 11902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 11911b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 119216f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn /** 1193b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called to have the fragment instantiate its user interface view. 1194b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * This is optional, and non-graphical fragments can return null (which 1195b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * is the default implementation). This will be called between 1196c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * {@link #onCreate(Bundle)} and {@link #onActivityCreated(Bundle)}. 1197b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * 11985ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p>If you return a View from here, you will later be called in 11995ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@link #onDestroyView} when the view is being released. 12005ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * 1201b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param inflater The LayoutInflater object that can be used to inflate 1202b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * any views in the fragment, 1203b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param container If non-null, this is the parent view that the fragment's 1204b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * UI should be attached to. The fragment should not add the view itself, 1205b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * but this can be used to generate the LayoutParams of the view. 1206b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param savedInstanceState If non-null, this fragment is being re-constructed 1207b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * from a previous saved state as given here. 1208b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * 1209b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @return Return the View for the fragment's UI, or null. 1210b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 1211b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public View onCreateView(LayoutInflater inflater, ViewGroup container, 1212b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle savedInstanceState) { 12132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn return null; 12142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 12151b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 12161b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn /** 12171b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * Called immediately after {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)} 12181b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * has returned, but before any saved state has been restored in to the view. 12191b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * This gives subclasses a chance to initialize themselves once 12201b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * they know their view hierarchy has been completely created. The fragment's 12211b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * view hierarchy is not however attached to its parent at this point. 12221b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * @param view The View returned by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}. 12231b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * @param savedInstanceState If non-null, this fragment is being re-constructed 12241b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * from a previous saved state as given here. 12251b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn */ 12261b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn public void onViewCreated(View view, Bundle savedInstanceState) { 12271b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 12282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1229662cc7a46a44af782a1f697d16b0613498312e1fScott Main /** 1230662cc7a46a44af782a1f697d16b0613498312e1fScott Main * Get the root view for the fragment's layout (the one returned by {@link #onCreateView}), 1231662cc7a46a44af782a1f697d16b0613498312e1fScott Main * if provided. 1232662cc7a46a44af782a1f697d16b0613498312e1fScott Main * 1233662cc7a46a44af782a1f697d16b0613498312e1fScott Main * @return The fragment's root view, or null if it has no layout. 1234662cc7a46a44af782a1f697d16b0613498312e1fScott Main */ 1235b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public View getView() { 1236b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mView; 1237b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1238b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 1239b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1240c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Called when the fragment's activity has been created and this 1241c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * fragment's view hierarchy instantiated. It can be used to do final 1242c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * initialization once these pieces are in place, such as retrieving 1243c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * views or restoring state. It is also useful for fragments that use 1244c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * {@link #setRetainInstance(boolean)} to retain their instance, 1245c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * as this callback tells the fragment when it is fully associated with 12465ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * the new activity instance. This is called after {@link #onCreateView} 124762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * and before {@link #onViewStateRestored(Bundle)}. 12481b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * 1249b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * @param savedInstanceState If the fragment is being re-created from 1250b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * a previous saved state, this is the state. 1251b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 1252c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public void onActivityCreated(Bundle savedInstanceState) { 1253b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mCalled = true; 12542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 125562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 125662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn /** 125762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * Called when all saved state has been restored into the view hierarchy 125862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * of the fragment. This can be used to do initialization based on saved 125962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * state that you are letting the view hierarchy track itself, such as 126062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * whether check box widgets are currently checked. This is called 126162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * after {@link #onActivityCreated(Bundle)} and before 126262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * {@link #onStart()}. 12631b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn * 126462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * @param savedInstanceState If the fragment is being re-created from 126562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn * a previous saved state, this is the state. 126662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn */ 126762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn public void onViewStateRestored(Bundle savedInstanceState) { 126862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = true; 126962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 127062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 1271b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1272b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the Fragment is visible to the user. This is generally 1273b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * tied to {@link Activity#onStart() Activity.onStart} of the containing 1274b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Activity's lifecycle. 1275b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 12762dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onStart() { 12772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 1278fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn 1279fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (!mLoadersStarted) { 1280fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = true; 1281fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (!mCheckedForLoaderManager) { 1282fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mCheckedForLoaderManager = true; 128362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false); 1284fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 1285fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoaderManager != null) { 1286fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager.doStart(); 1287fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 1288c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 12892dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 12902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1291b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1292b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the fragment is visible to the user and actively running. 1293b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * This is generally 1294b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * tied to {@link Activity#onResume() Activity.onResume} of the containing 1295b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Activity's lifecycle. 1296b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 12972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onResume() { 12982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 12992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1301727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn /** 1302727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * Called to ask the fragment to save its current dynamic state, so it 1303727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * can later be reconstructed in a new instance of its process is 1304727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * restarted. If a new instance of the fragment later needs to be 1305727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * created, the data you place in the Bundle here will be available 1306727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * in the Bundle given to {@link #onCreate(Bundle)}, 1307727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}, and 1308727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * {@link #onActivityCreated(Bundle)}. 1309727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * 1310727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * <p>This corresponds to {@link Activity#onSaveInstanceState(Bundle) 13112f761760459fe27c8e9f96569bb7f28fc5b58babDaisuke Miyakawa * Activity.onSaveInstanceState(Bundle)} and most of the discussion there 1312727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * applies here as well. Note however: <em>this method may be called 1313727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * at any time before {@link #onDestroy()}</em>. There are many situations 1314727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * where a fragment may be mostly torn down (such as when placed on the 1315727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * back stack with no UI showing), but its state will not be saved until 1316727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * its owning activity actually needs to save its state. 1317727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * 1318727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn * @param outState Bundle in which to place your saved state. 1319727782053ced0cac5beadc2c7ee9382d0f1ba1f5Dianne Hackborn */ 13202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onSaveInstanceState(Bundle outState) { 13212dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 13232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onConfigurationChanged(Configuration newConfig) { 13242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 13252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1327b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1328b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the Fragment is no longer resumed. This is generally 1329b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * tied to {@link Activity#onPause() Activity.onPause} of the containing 1330b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Activity's lifecycle. 1331b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 13322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onPause() { 13332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 13342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1336b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1337b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the Fragment is no longer started. This is generally 1338b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * tied to {@link Activity#onStop() Activity.onStop} of the containing 1339b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Activity's lifecycle. 1340b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 13412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onStop() { 13422dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 13432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 13452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onLowMemory() { 13462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 13472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 1349c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void onTrimMemory(int level) { 1350c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mCalled = true; 1351c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 1352c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 1353b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 13545ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Called when the view previously created by {@link #onCreateView} has 13555ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * been detached from the fragment. The next time the fragment needs 13565ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * to be displayed, a new view will be created. This is called 1357def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * after {@link #onStop()} and before {@link #onDestroy()}. It is called 1358def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * <em>regardless</em> of whether {@link #onCreateView} returned a 1359def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * non-null view. Internally it is called after the view's state has 1360def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn * been saved but before it has been removed from its parent. 13615ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn */ 13625ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public void onDestroyView() { 13635ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn mCalled = true; 13645ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 13655ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 13665ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn /** 1367b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the fragment is no longer in use. This is called 1368b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * after {@link #onStop()} and before {@link #onDetach()}. 1369b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 13702dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onDestroy() { 13712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 13725e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn //Log.v("foo", "onDestroy: mCheckedForLoaderManager=" + mCheckedForLoaderManager 13735e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn // + " mLoaderManager=" + mLoaderManager); 13745e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn if (!mCheckedForLoaderManager) { 13755e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mCheckedForLoaderManager = true; 137662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false); 13775e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 1378c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mLoaderManager != null) { 1379c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn mLoaderManager.doDestroy(); 1380c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 13812dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 13825ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 1383b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /** 1384afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * Called by the fragment manager once this fragment has been removed, 1385afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * so that we don't have any left-over state if the application decides 1386afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * to re-use the instance. This only clears state that the framework 1387afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn * internally manages, not things the application sets. 1388afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn */ 1389afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn void initState() { 1390afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mIndex = -1; 1391afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mWho = null; 1392afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mAdded = false; 1393afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mRemoving = false; 1394afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mResumed = false; 1395afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mFromLayout = false; 1396afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mInLayout = false; 1397afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mRestored = false; 1398afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mBackStackNesting = 0; 1399afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mFragmentManager = null; 14006c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn mActivity = null; 1401afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mFragmentId = 0; 1402afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mContainerId = 0; 1403afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mTag = null; 1404afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mHidden = false; 1405afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mDetached = false; 1406afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mRetaining = false; 1407afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mLoaderManager = null; 1408afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mLoadersStarted = false; 1409afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mCheckedForLoaderManager = false; 1410afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 1411afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn 1412afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn /** 1413b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * Called when the fragment is no longer attached to its activity. This 1414b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn * is called after {@link #onDestroy()}. 1415b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn */ 14162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void onDetach() { 14172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCalled = true; 14182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 1419b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 1420b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 1421b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * Initialize the contents of the Activity's standard options menu. You 1422b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * should place your menu items in to <var>menu</var>. For this method 14235ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * to be called, you must have first called {@link #setHasOptionsMenu}. See 14245ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@link Activity#onCreateOptionsMenu(Menu) Activity.onCreateOptionsMenu} 14255ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * for more information. 1426b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1427b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @param menu The options menu in which you place your items. 1428b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 14294dc643eb6749afe5211198c920e739475590f92cWink Saville * @see #setHasOptionsMenu 1430b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @see #onPrepareOptionsMenu 1431b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @see #onOptionsItemSelected 1432b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 1433b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 1434b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 1435b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 1436b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 1437b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * Prepare the Screen's standard options menu to be displayed. This is 1438b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * called right before the menu is shown, every time it is shown. You can 1439b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * use this method to efficiently enable/disable items or otherwise 1440b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * dynamically modify the contents. See 1441b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * {@link Activity#onPrepareOptionsMenu(Menu) Activity.onPrepareOptionsMenu} 1442b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * for more information. 1443b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1444b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @param menu The options menu as last shown or first initialized by 1445b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * onCreateOptionsMenu(). 1446b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 14474dc643eb6749afe5211198c920e739475590f92cWink Saville * @see #setHasOptionsMenu 1448b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @see #onCreateOptionsMenu 1449b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 1450b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void onPrepareOptionsMenu(Menu menu) { 1451b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 1452b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 1453b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 14548eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn * Called when this fragment's option menu items are no longer being 14558eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn * included in the overall options menu. Receiving this call means that 14568eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn * the menu needed to be rebuilt, but this fragment's items were not 14578eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn * included in the newly built menu (its {@link #onCreateOptionsMenu(Menu, MenuInflater)} 14588eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn * was not called). 14598eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn */ 14608eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn public void onDestroyOptionsMenu() { 14618eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn } 14628eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn 14638eb2e244f9b14d946ee587d0b673b866865026c0Dianne Hackborn /** 1464b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * This hook is called whenever an item in your options menu is selected. 1465b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * The default implementation simply returns false to have the normal 1466b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * processing happen (calling the item's Runnable or sending a message to 1467b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * its Handler as appropriate). You can use this method for any items 1468b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * for which you would like to do processing without those other 1469b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * facilities. 1470b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1471b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * <p>Derived classes should call through to the base class for it to 1472b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * perform the default menu handling. 1473b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1474b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @param item The menu item that was selected. 1475b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1476b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @return boolean Return false to allow normal menu processing to 1477b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * proceed, true to consume it here. 1478b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1479b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @see #onCreateOptionsMenu 1480b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 1481b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public boolean onOptionsItemSelected(MenuItem item) { 1482b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return false; 1483b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 1484b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 1485b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 1486b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * This hook is called whenever the options menu is being closed (either by the user canceling 1487b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * the menu with the back/menu button, or when an item is selected). 1488b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * 1489b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * @param menu The options menu as last shown or first initialized by 1490b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * onCreateOptionsMenu(). 1491b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 1492b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void onOptionsMenuClosed(Menu menu) { 1493b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 14945ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 14955ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn /** 14965ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Called when a context menu for the {@code view} is about to be shown. 14975ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Unlike {@link #onCreateOptionsMenu}, this will be called every 14985ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * time the context menu is about to be shown and should be populated for 14995ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * the view (or item inside the view for {@link AdapterView} subclasses, 15005ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * this can be found in the {@code menuInfo})). 15015ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p> 15025ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Use {@link #onContextItemSelected(android.view.MenuItem)} to know when an 15035ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * item has been selected. 15045ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p> 15055ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * The default implementation calls up to 15065ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@link Activity#onCreateContextMenu Activity.onCreateContextMenu}, though 15075ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * you can not call this implementation if you don't want that behavior. 15085ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p> 15095ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * It is not safe to hold onto the context menu after this method returns. 15105ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@inheritDoc} 15115ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn */ 15125ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 15135ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn getActivity().onCreateContextMenu(menu, v, menuInfo); 15145ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 15155ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 15165ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn /** 15175ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Registers a context menu to be shown for the given view (multiple views 15185ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * can show the context menu). This method will set the 15195ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@link OnCreateContextMenuListener} on the view to this fragment, so 15205ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be 15215ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * called when it is time to show the context menu. 15225ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * 15235ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @see #unregisterForContextMenu(View) 15245ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @param view The view that should show a context menu. 15255ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn */ 15265ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public void registerForContextMenu(View view) { 15275ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn view.setOnCreateContextMenuListener(this); 15285ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 15295ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 15305ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn /** 15315ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Prevents a context menu to be shown for the given view. This method will 15325ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * remove the {@link OnCreateContextMenuListener} on the view. 15335ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * 15345ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @see #registerForContextMenu(View) 15355ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @param view The view that should stop showing a context menu. 15365ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn */ 15375ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public void unregisterForContextMenu(View view) { 15385ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn view.setOnCreateContextMenuListener(null); 15395ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 15405ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 15415ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn /** 15425ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * This hook is called whenever an item in a context menu is selected. The 15435ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * default implementation simply returns false to have the normal processing 15445ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * happen (calling the item's Runnable or sending a message to its Handler 15455ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * as appropriate). You can use this method for any items for which you 15465ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * would like to do processing without those other facilities. 15475ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p> 15485ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Use {@link MenuItem#getMenuInfo()} to get extra information set by the 15495ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * View that added this menu item. 15505ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * <p> 15515ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * Derived classes should call through to the base class for it to perform 15525ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * the default menu handling. 15535ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * 15545ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @param item The context menu item that was selected. 15555ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * @return boolean Return false to allow normal context menu processing to 15565ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn * proceed, true to consume it here. 15575ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn */ 15585ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public boolean onContextItemSelected(MenuItem item) { 15595ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return false; 15605ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 15612707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn 1562625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 1563625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Print the Fragments's state into the given stream. 1564625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 1565625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param prefix Text to print at the front of each line. 1566625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param fd The raw file descriptor that the dump is being sent to. 1567625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param writer The PrintWriter to which you should dump your state. This will be 1568625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * closed for you after you return. 1569625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param args additional arguments to the dump request. 1570625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 1571625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 157230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.print("mFragmentId=#"); 157330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(mFragmentId)); 1574ee76efb74b5886f98cdfebfbefe9b69224e016fbDianne Hackborn writer.print(" mContainerId=#"); 157530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(mContainerId)); 1576625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mTag="); writer.println(mTag); 1577625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mState="); writer.print(mState); 1578625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mIndex="); writer.print(mIndex); 1579625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mWho="); writer.print(mWho); 1580625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mBackStackNesting="); writer.println(mBackStackNesting); 1581625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mAdded="); writer.print(mAdded); 15825d9d03a0234faa3cffd11502f973057045cafe82Dianne Hackborn writer.print(" mRemoving="); writer.print(mRemoving); 1583625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mResumed="); writer.print(mResumed); 1584625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mFromLayout="); writer.print(mFromLayout); 1585625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mInLayout="); writer.println(mInLayout); 1586625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mHidden="); writer.print(mHidden); 158716f6e89c2a4bbf73fe15cb2e81c8fec98c7ac831Dianne Hackborn writer.print(" mDetached="); writer.print(mDetached); 15886c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn writer.print(" mMenuVisible="); writer.print(mMenuVisible); 1589625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mHasMenu="); writer.println(mHasMenu); 15906c285977a0dc9605348bd9530282c7d006cbf8bdDianne Hackborn writer.print(prefix); writer.print("mRetainInstance="); writer.print(mRetainInstance); 159178fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell writer.print(" mRetaining="); writer.print(mRetaining); 159278fed9b78f8b3b92979b94dda2640cdeaffb2573Adam Powell writer.print(" mUserVisibleHint="); writer.println(mUserVisibleHint); 1593625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mFragmentManager != null) { 1594625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mFragmentManager="); 1595625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.println(mFragmentManager); 1596625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1597625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mActivity != null) { 1598625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mActivity="); 1599625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.println(mActivity); 1600625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 160162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mParentFragment != null) { 160262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn writer.print(prefix); writer.print("mParentFragment="); 160362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn writer.println(mParentFragment); 160462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 1605625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mArguments != null) { 1606625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mArguments="); writer.println(mArguments); 1607625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1608625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mSavedFragmentState != null) { 1609625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mSavedFragmentState="); 1610625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.println(mSavedFragmentState); 1611625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1612625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mSavedViewState != null) { 1613625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mSavedViewState="); 1614625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.println(mSavedViewState); 1615625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1616625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mTarget != null) { 1617625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mTarget="); writer.print(mTarget); 1618625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(" mTargetRequestCode="); 1619625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.println(mTargetRequestCode); 1620625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1621625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mNextAnim != 0) { 1622625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mNextAnim="); writer.println(mNextAnim); 1623625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1624625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mContainer != null) { 1625625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mContainer="); writer.println(mContainer); 1626625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1627625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mView != null) { 1628625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn writer.print(prefix); writer.print("mView="); writer.println(mView); 1629625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1630d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn if (mAnimatingAway != null) { 1631d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn writer.print(prefix); writer.print("mAnimatingAway="); writer.println(mAnimatingAway); 1632d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn writer.print(prefix); writer.print("mStateAfterAnimating="); 1633d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn writer.println(mStateAfterAnimating); 1634d173fa3b1cb8e4294aba7564c0171894be6c3c24Dianne Hackborn } 1635625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (mLoaderManager != null) { 163630d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.println("Loader Manager:"); 163730d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn mLoaderManager.dump(prefix + " ", fd, writer, args); 1638625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 163962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 16401b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn writer.print(prefix); writer.println("Child " + mChildFragmentManager + ":"); 164162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dump(prefix + " ", fd, writer, args); 164262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 164362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 164462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 164562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn Fragment findFragmentByWho(String who) { 164662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (who.equals(mWho)) { 164762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return this; 164862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 164962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 165062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return mChildFragmentManager.findFragmentByWho(who); 165162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 165262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return null; 165362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 165462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 165562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void instantiateChildFragmentManager() { 165662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager = new FragmentManagerImpl(); 165762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.attachActivity(mActivity, new FragmentContainer() { 165862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn @Override 165962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn public View findViewById(int id) { 166062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mView == null) { 166162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new IllegalStateException("Fragment does not have a view"); 166262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 166362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return mView.findViewById(id); 166462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 166562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn }, this); 166662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 166762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 166862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performCreate(Bundle savedInstanceState) { 16691b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn if (mChildFragmentManager != null) { 16701b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn mChildFragmentManager.noteStateNotSaved(); 16711b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 167262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 167362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onCreate(savedInstanceState); 167462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 167562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 167662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onCreate()"); 167762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 167862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (savedInstanceState != null) { 167962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn Parcelable p = savedInstanceState.getParcelable(Activity.FRAGMENTS_TAG); 168062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (p != null) { 168162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager == null) { 168262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn instantiateChildFragmentManager(); 168362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 168462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.restoreAllState(p, null); 168562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchCreate(); 168662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 168762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 168862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 168962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 16901b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn View performCreateView(LayoutInflater inflater, ViewGroup container, 16911b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn Bundle savedInstanceState) { 16921b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn if (mChildFragmentManager != null) { 16931b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn mChildFragmentManager.noteStateNotSaved(); 16941b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 16951b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn return onCreateView(inflater, container, savedInstanceState); 16961b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 16971b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn 169862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performActivityCreated(Bundle savedInstanceState) { 16991b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn if (mChildFragmentManager != null) { 17001b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn mChildFragmentManager.noteStateNotSaved(); 17011b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn } 170262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 170362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onActivityCreated(savedInstanceState); 170462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 170562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 170662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onActivityCreated()"); 170762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 170862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 170962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchActivityCreated(); 171062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 1711625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 1712625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 1713afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn void performStart() { 171462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 171562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.noteStateNotSaved(); 171662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.execPendingActions(); 171762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 171862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 1719afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn onStart(); 172062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 172162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 172262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onStart()"); 172362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 172462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 172562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchStart(); 172662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 1727afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn if (mLoaderManager != null) { 1728afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mLoaderManager.doReportStart(); 1729afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 1730afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 1731afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn 173262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performResume() { 173362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 17341b8ecc5031051b4bba620fac27552e84ca666496Dianne Hackborn mChildFragmentManager.noteStateNotSaved(); 173562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.execPendingActions(); 173662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 173762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 173862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onResume(); 173962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 174062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 174162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onResume()"); 174262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 174362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 174462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchResume(); 174562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.execPendingActions(); 174662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 174762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 174862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 174962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performConfigurationChanged(Configuration newConfig) { 175062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onConfigurationChanged(newConfig); 175162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 175262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchConfigurationChanged(newConfig); 175362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 175462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 175562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 175662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performLowMemory() { 175762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onLowMemory(); 175862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 175962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchLowMemory(); 176062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 176162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 176262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 176362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performTrimMemory(int level) { 176462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onTrimMemory(level); 176562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 176662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchTrimMemory(level); 176762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 176862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 176962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 177062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean performCreateOptionsMenu(Menu menu, MenuInflater inflater) { 177162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean show = false; 177262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mHidden) { 177362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mHasMenu && mMenuVisible) { 177462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn show = true; 177562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onCreateOptionsMenu(menu, inflater); 177662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 177762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 177862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn show |= mChildFragmentManager.dispatchCreateOptionsMenu(menu, inflater); 177962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 178062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 178162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return show; 178262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 178362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 178462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean performPrepareOptionsMenu(Menu menu) { 178562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean show = false; 178662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mHidden) { 178762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mHasMenu && mMenuVisible) { 178862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn show = true; 178962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onPrepareOptionsMenu(menu); 179062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 179162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 179262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn show |= mChildFragmentManager.dispatchPrepareOptionsMenu(menu); 179362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 179462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 179562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return show; 179662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 179762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 179862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean performOptionsItemSelected(MenuItem item) { 179962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mHidden) { 180062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mHasMenu && mMenuVisible) { 180162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (onOptionsItemSelected(item)) { 180262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return true; 180362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 180462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 180562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 180662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager.dispatchOptionsItemSelected(item)) { 180762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return true; 180862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 180962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 181062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 181162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return false; 181262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 181362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 181462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn boolean performContextItemSelected(MenuItem item) { 181562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mHidden) { 181662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (onContextItemSelected(item)) { 181762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return true; 181862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 181962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 182062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager.dispatchContextItemSelected(item)) { 182162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return true; 182262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 182362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 182462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 182562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn return false; 182662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 182762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 182862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performOptionsMenuClosed(Menu menu) { 182962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mHidden) { 183062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mHasMenu && mMenuVisible) { 183162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onOptionsMenuClosed(menu); 183262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 183362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 183462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchOptionsMenuClosed(menu); 183562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 183662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 183762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 183862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 183962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performSaveInstanceState(Bundle outState) { 184062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onSaveInstanceState(outState); 184162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 184262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn Parcelable p = mChildFragmentManager.saveAllState(); 184362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (p != null) { 184462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn outState.putParcelable(Activity.FRAGMENTS_TAG, p); 184562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 184662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 184762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 184862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 184962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performPause() { 185062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 185162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchPause(); 185262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 185362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 185462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onPause(); 185562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 185662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 185762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onPause()"); 185862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 185962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 186062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 18612707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn void performStop() { 186262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 186362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchStop(); 186462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 186562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 18662707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn onStop(); 186762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 186862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 186962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onStop()"); 187062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 1871fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn 1872fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoadersStarted) { 1873fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = false; 18745e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn if (!mCheckedForLoaderManager) { 18755e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mCheckedForLoaderManager = true; 187662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, false); 18775e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 18782707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mLoaderManager != null) { 18792707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mActivity == null || !mActivity.mChangingConfigurations) { 18802707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doStop(); 18812707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } else { 18822707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doRetain(); 18832707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 18842707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 18852707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 18862707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 1887afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn 1888afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn void performDestroyView() { 188962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 189062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchDestroyView(); 189162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 189262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 1893afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn onDestroyView(); 189462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 189562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 189662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onDestroyView()"); 189762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 1898afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn if (mLoaderManager != null) { 1899afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn mLoaderManager.doReportNextStart(); 1900afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 1901afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn } 190262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn 190362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn void performDestroy() { 190462bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (mChildFragmentManager != null) { 190562bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mChildFragmentManager.dispatchDestroy(); 190662bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 190762bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn mCalled = false; 190862bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn onDestroy(); 190962bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn if (!mCalled) { 191062bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn throw new SuperNotCalledException("Fragment " + this 191162bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn + " did not call through to super.onDestroy()"); 191262bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 191362bea2f1710be0d1a42c07109fd4307ded660d3bDianne Hackborn } 19142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn} 1915