1 page.title= 2 page.tags=, 3 @jd:body 4 5 <div id="qv-wrapper"> 6 <div id="qv"> 7 8 <h2> </h2> 9 <ol> 10 <li><a href="#RetainingAnObject"> </a></li> 11 <li><a href="#HandlingTheChange"> </a> 12 </ol> 13 14 <h2> </h2> 15 <ol> 16 <li><a href="providing-resources.html"> </a></li> 17 <li><a href="accessing-resources.html"> </a></li> 18 <li><a href="http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html"> 19 </a></li> 20 </ol> 21 </div> 22 </div> 23 24 <p> 25 (: , ). , 26 Android 27 {@link android.app.Activity} ({@link android.app.Activity#onDestroy()} , {@link 28 android.app.Activity#onCreate(Bundle) onCreate()} ). 29 30 (: ).</p> 31 32 <p> 33 <a href="{@docRoot}guide/components/activities.html#Lifecycle"> 34 </a> . Android 35 {@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} 36 . 37 {@link android.app.Activity#onCreate(Bundle) onCreate()} {@link 38 android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()} .</p> 39 40 <p> , 41 ( ). 42 . 43 . . 44 45 . , <a href="{@docRoot}guide/components/activities.html#Lifecycle"> </a> .</p> 46 47 <p>, 48 . , 49 .</p> 50 51 <ol type="a"> 52 <li><a href="#RetainingAnObject"> </a> 53 <p> , 54 .</p> 55 56 </li> 57 <li><a href="#HandlingTheChange"> </a> 58 <p> , 59 60 .</p> 61 </li> 62 </ol> 63 64 65 <h2 id="RetainingAnObject"> </h2> 66 67 <p> , 68 . 69 . , 70 {@link android.os.Bundle} . {@link 71 android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} . (: ) 72 . 73 . 74 {@link 75 android.app.Fragment} . 76 .</p> 77 78 <p>Android , 79 . 80 .</p> 81 82 <p> .</p> 83 84 <ol> 85 <li>{@link android.app.Fragment} 86 .</li> 87 <li> {@link android.app.Fragment#setRetainInstance(boolean)} . 88 </li> 89 <li> .</li> 90 <li>{@link android.app.FragmentManager} 91 .</li> 92 </ol> 93 94 <p> .</p> 95 96 <pre> 97 public class RetainedFragment extends Fragment { 98 99 // data object we want to retain 100 private MyDataObject data; 101 102 // this method is only called once for this fragment 103 @Override 104 public void onCreate(Bundle savedInstanceState) { 105 super.onCreate(savedInstanceState); 106 // retain this fragment 107 setRetainInstance(true); 108 } 109 110 public void setData(MyDataObject data) { 111 this.data = data; 112 } 113 114 public MyDataObject getData() { 115 return data; 116 } 117 } 118 </pre> 119 120 <p class="caution"><strong>:</strong> , 121 {@link android.app.Activity} . {@link 122 android.graphics.drawable.Drawable}, {@link android.widget.Adapter}, {@link android.view.View} 123 {@link android.content.Context} . , 124 . ( 125 , 126 .)</p> 127 128 <p> {@link android.app.FragmentManager} . 129 130 . , .</p> 131 132 <pre> 133 public class MyActivity extends Activity { 134 135 private RetainedFragment dataFragment; 136 137 @Override 138 public void onCreate(Bundle savedInstanceState) { 139 super.onCreate(savedInstanceState); 140 setContentView(R.layout.main); 141 142 // find the retained fragment on activity restarts 143 FragmentManager fm = getFragmentManager(); 144 dataFragment = (DataFragment) fm.findFragmentByTag(data); 145 146 // create the fragment and data the first time 147 if (dataFragment == null) { 148 // add the fragment 149 dataFragment = new DataFragment(); 150 fm.beginTransaction().add(dataFragment, data).commit(); 151 // load the data from the web 152 dataFragment.setData(loadMyData()); 153 } 154 155 // the data is available in dataFragment.getData() 156 ... 157 } 158 159 @Override 160 public void onDestroy() { 161 super.onDestroy(); 162 // store the data in the fragment 163 dataFragment.setData(collectMyLoadedData()); 164 } 165 } 166 </pre> 167 168 <p> {@link android.app.Activity#onCreate(Bundle) onCreate()} 169 . {@link android.app.Activity#onCreate(Bundle) onCreate()} 170 . 171 {@link android.app.Activity#onDestroy() onDestroy()} 172 .</p> 173 174 175 176 177 178 <h2 id="HandlingTheChange"> </h2> 179 180 <p> 181 <em></em> , 182 . 183 .</p> 184 185 <p class="note"><strong>:</strong> 186 . 187 . 188 .</p> 189 190 <p> , <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 191 <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code 192 android:configChanges}</a> 193 . <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code 194 android:configChanges}</a> ( {@code "orientation"} 195 {@code "keyboardHidden"} 196 ). . 197 {@code |} .</p> 198 199 <p> 200 .</p> 201 202 <pre> 203 <activity android:name=".MyActivity" 204 android:configChanges="orientation|keyboardHidden" 205 android:label="@string/app_name"> 206 </pre> 207 208 <p> {@code MyActivity} . 209 , {@code MyActivity} {@link 210 android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} . 211 {@link android.content.res.Configuration} , 212 . {@link android.content.res.Configuration} 213 . 214 . 215 , {@link android.content.res.Resources} 216 , 217 UI .</p> 218 219 <p class="caution"><strong>:</strong> Android 3.2(API 13) 220 <strong>" " 221 </strong>. , 222 API 13 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> 223 ) , {@code 224 "orientation"} {@code "screenSize"} . , {@code 225 android:configChanges="orientation|screenSize"} . , API 12 226 ( 227 . Android 3.2 ).</p> 228 229 <p> , {@link 230 android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} 231 .</p> 232 233 <pre> 234 @Override 235 public void onConfigurationChanged(Configuration newConfig) { 236 super.onConfigurationChanged(newConfig); 237 238 // Checks the orientation of the screen 239 if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 240 Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 241 } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 242 Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 243 } 244 } 245 </pre> 246 247 <p>{@link android.content.res.Configuration} 248 . 249 250 . {@link 251 android.content.res.Resources} {@link android.widget.ImageView#setImageResource(int) 252 setImageResource()} 253 {@link android.widget.ImageView} 254 (<a href="providing-resources.html#AlternateResources"> </a> ).</p> 255 256 <p>{@link 257 android.content.res.Configuration} 258 {@link android.content.res.Configuration} . 259 {@link 260 android.content.res.Configuration} .</p> 261 262 <p class="note"><strong> :</strong> , 263 . 264 , 265 {@link 266 android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} .</p> 267 268 <p> , 269 {@link 270 android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} <em></em> . 271 , 272 . , 273 274 . 275 , , 276 277 .</p> 278 279 <p> <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code 280 android:configChanges}</a> {@link android.content.res.Configuration} 281 .</p> 282