Android學習筆記(六)通過Intent啓動其他Activity

    在一個Android應用中,一般都不只一個Activity對象,那麼怎麼去通過一個Activity啓動另外一個Activity呢,或者將當前Activity的數據傳到另外的Activity中,或者從其他Activity中獲取值,或者啓動Android系統中的其他應用呢?這裏就要用到Intent對象,intent我們稱之爲“意圖”它攜帶了我們執行的動作或信息,其實就是相當於網絡中的packet數據包(暫且這樣理解),就是用來傳遞命令和數據的,它在兩個Activtiy中起到橋樑作用。
這裏通過啓動另外一個Activity ,並將當前Activity 的數據傳送到另外一個Activity 上。
    在helloWorld中我們編寫了一個文本輸入框和send按鈕的Activity,這裏我們再編寫一個Activity,java文件爲DisplayMessageActivity.java ,來顯示前一個Activity發送的內容。

a、爲按鈕添加事件響應

爲了將Activity A上的數據能傳送,我們得先響應按鈕事件,
activity_main.xml佈局文件中button元素添加上android:onClick屬性,修改後如下:
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"
    android:onClick="sendMessage" />
android:onClick屬性值爲sendMessage,"sendMessage"爲MainActivity.java類中的一個方法,用來響應Button的點擊事件。
在MainActivity.java文件中加上方法sendMessage,如下:
/** 該方法將在用戶點擊了send Button時調用*/
public void sendMessage(View view) {
    // Do something in response to button
}
爲了響應onClick,該方法必須滿足下列條件:
方法必須爲public的;
返回值必須爲空(void)
有且僅有一個View類型的參數(該參數即爲當前OnClick事件的源source)

b、構建意圖(Intent)

這裏我們在上面的sendMessage方法中添加一個意圖(Intent),來啓動封裝我們要發送的數據;如下:
//DisplayMessageActivity.class 這裏表示要啓動該Activity
Intent intent = new Intent(this, DisplayMessageActivity.class);
//通過findViewById方法來從佈局文件中找到對應的viwe對象
EditText editText = (EditText) findViewById(R.id.edit_text);
String message = editText.getText().toString();//獲取eidtText的數據
intent.putExtra(EXTRA_MESSAGE, message);//設置到intent對象上
startActivity(intent);//調用startActivity方法執行intent來啓動DisplayMessageActivity
EXTRA_MESSAGE 爲我們爲當前消息設置的一個key值,該值用來唯一標識當前消息,其他Activity就可以通過這個標識key來獲取消息內容。
這裏我們在當前Activity中定義爲:
public final static String EXTRA_MESSAGE = "com.example.helloword.MESSAGE";
在前面加上包前綴,主要是用於唯一標示該key。

c、創建第二個Activity即DisplayMessageActivity

在工具欄中選擇new 按鈕,在彈出的對話框中選擇Android ->Android Activity,如圖:
點擊next,如圖:
工程名處Project我們選擇HelloWord
Activity Name處輸入:DisplayMessageActivity
Layout Name輸入activity_diskplay_message
Title 即爲Activity顯示時的標題欄類容,這裏默認的是顯示DisplayMessageActivity.
點擊Finish,成功創建好了DisplayMessageActivity.java文件和對應的佈局文件。
打開DisplayMessageActivity.java文件,此時我們看到系統自動把對應的layout設置上了,onCreate初始代碼爲:
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_display_message);
}

d、解析並呈現Intent內容

在onCreate中,通過方法getIntent來獲取並解析出從ActivityMain 中傳來的數據。
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
數據獲取到後,我們通過一個TextView將其顯示出來;
修改後的onCreate方法如下:
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 從intent中獲取數據
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);
    //設置textView爲當前的contentView
    setContentView(textView);
}

e、在AndroidManifest.xml中聲明新加的Activity,即DisplayMessageActivity

前面說了,任何要需要再系統中呈現的Activity都必須在AndroidManifest.xml中通過activity元素進行聲明。
打開AndroidManifest.xml文件,我們看到DisplayActivity系統已經爲我們聲明瞭,如果系統沒有自動添加,則需要我們手動加上:
        <activity
            android:name="com.example.helloword.DisplayMessageActivity"
            android:label="@string/title_activity_display_message" >
        </activity>

f、運行程序

現在就可以運行我們的程序了。運行後,在文本輸入框中輸入Hello world 點擊send按鈕,則會跳轉到另外一個Activity去,並顯示出了Hello world,如圖:
      

發佈了83 篇原創文章 · 獲贊 130 · 訪問量 96萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章