Android 程式開發:(七)處理變化 —— 7.1 觸發事件

來源:互聯網
上載者:User

目前看來,我們已經看到了,可以使用兩種方法去適應螢幕方向的改變。現在,讓我們看以下,當螢幕方向改變的時候,Activity狀態的改變。

1、建立一個工程:Orientations。


2、main.xml檔案。

[html]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<!-- 注意,這個EditText使用了android:id屬性 --> 
<EditText 
    android:id="@+id/txtField1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 
<!-- 注意,這個EditText沒有使用android:id屬性 --> 
<EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 
 
</LinearLayout> 
3、OrentationsActivity.java。
[java]
public class OrientationsActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        Log.d("StateInfo", "onCreate"); 
    } 
     
    @Override 
    public void onStart() { 
        Log.d("StateInfo", "onStart"); 
        super.onStart(); 
    } 
 
    @Override 
    public void onResume() { 
        Log.d("StateInfo", "onResume"); 
        super.onResume(); 
    } 
 
    @Override 
    public void onPause() { 
        Log.d("StateInfo", "onPause"); 
        super.onPause(); 
    } 
 
    @Override 
    public void onStop() { 
        Log.d("StateInfo", "onStop"); 
        super.onStop(); 
    } 
 
    @Override 
    public void onDestroy() { 
        Log.d("StateInfo", "onDestroy"); 
        super.onDestroy(); 
    } 
 
    @Override 
    public void onRestart() { 
        Log.d("StateInfo", "onRestart"); 
        super.onRestart(); 
    } 
 
} 
4、調試。
5、在兩個EditText中輸入一些字元。就像這樣。

 

6、按Ctrl+F11,改變螢幕的方向。展示了橫屏下的模擬器。注意,第一個EditText的內容仍然是存在的,但第二個EditText已經被清空了。(文章結尾會解釋這是為什麼)

 

7、觀察LogCat視窗。

[html] 
12-15 12:27:20.747: D/StateInfo(557):onCreate 
12-15 12:27:20.747: D/StateInfo(557):onStart 
12-15 12:27:20.747: D/StateInfo(557):onResume 
... 
12-15 12:39:37.846: D/StateInfo(557):onPause 
12-15 12:39:37.846: D/StateInfo(557):onStop 
12-15 12:39:37.866: D/StateInfo(557):onDestroy 
12-15 12:39:38.206: D/StateInfo(557):onCreate 
12-15 12:39:38.216: D/StateInfo(557):onStart 
12-15 12:39:38.257: D/StateInfo(557):onResume 
從LogCat視窗可以看出,當螢幕方向改變的時候,Activity被銷毀了。
[html] 
12-15 12:39:37.846: D/StateInfo(557):onPause 
12-15 12:39:37.846: D/StateInfo(557):onStop 
12-15 12:39:37.866: D/StateInfo(557):onDestroy 
隨之,它又被重新建立了。
[html] 
12-15 12:39:38.206: D/StateInfo(557):onCreate 
12-15 12:39:38.216: D/StateInfo(557):onStart 
12-15 12:39:38.257: D/StateInfo(557):onResume 
理解Activity的這種行為變化是很重要的,因為在螢幕方向改變之前,我們要執行一些必要的操作去儲存當前activity的“狀態”。例如,你的activity有一些變數,這些變數儲存了一些需要被計算的值,這些值需要被儲存。對任何activity而言,你都應該在onPause()方法中去儲存“狀態”,因為onPause()方法是在螢幕方向改變時,出現的第一個方法。接下來的幾節教程,將會闡述儲存“狀態”的幾種不同方法。

!!!

另一個需要特別注意的地方:當儲存views的activity被銷毀的時候,只有那些在activity中被聲明的views(通過android:id屬性)會儲存它們自己的狀態。例如,當使用者在一個EditText中輸入資訊的時候,他可能改變螢幕的方向。這時,當activity被重新建立的時候,EditText中的資訊就會自動地儲存了,並重新顯示在EditText中。相反,如果不使用android:id聲明EditText,那麼activity就不會儲存EditText當前的任何內容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.