Respond to the Send Button-響應Send(發送)按鈕
響應按鈕的on-click(點擊)事件,開啟main.xml布局檔案然後在Button(按鈕)元素中添加android:onclick屬性:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" /> www.2cto.com
android:onclick屬性的值:sendMessage就是當使用者點擊你螢幕按鈕時觸發方法的名字。
添加相應的方法在MyFirstActivity類中:
/** 當使用者點擊Send按鈕時調用 */
public void sendMessage(View view) {
// 做一些相應按鈕的操作
}
注意:在Eclipse中,按Ctrl + Shift + O 可以匯入缺失的類(在Mac中使用Cmd + Shift + O )
請注意,為了讓系統能夠將這個方法(你剛在MyFirstActivity中添加的sendMessage方法)與在android:onClick屬性中提供的方法名字匹配,它們的名字必須一致,特別是,這個方法必須滿足以下條件:
公用的
沒有傳回值
有一個唯一的視圖(View)參數(這個視圖就是將被點擊的視圖)
接下來,你可以在這個方法中編寫讀取常值內容的代碼,並將該內容傳到另一個Activity
Build an Intent-構建一個Intent(意圖)
Intent(意圖)是在不同組件中提供運行時串連的對象(比如兩個Activity)。Intent(意圖)代表一個應用"想去做什麼事",你可以用它做各種各樣的任務,不過大部分的時候他們被用來啟動另一個Activity。在sendMessage()方法中建立一個Intent(意圖)並啟動名為DisplayMessageActivity的Activity:
Intent intent = new Intent(this, DisplayMessageActivity.class);
在這個Intent建構函式中有兩個參數: 第一個參數是Context(上下文)(之所有可以用this是因為當前Activity(MyFirstActivity)是Context的子類) 系統需要傳遞Intent的應用組件的class對象(在這個案例中,這個activity應該被啟動)
注意:如果你正在使用的是類似Eclipse的IDE,這裡對DisplayMessageActivity的引用會報錯,因為這個類還不存在;注意這個錯誤,你很快就要去建立這個類了。
一個Intent(意圖)不僅允許你啟動另一個Activity,同時也可以傳遞一個資料包到另一個Activity,ok,用findViewById()方法得到EditText元素,然後將它的資訊添加到Intent(意圖):
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
Sending an intent to other apps-發送intent(意圖)到其他app(應用)
在這課中建立的Intent(意圖)包含了一個非常明確的意圖,因為它指定了一個Intent需要的精確app(應用)組件; 然而,在Intent沒有指定明確的組件時,Intent(意圖)是隱式的,但它允許安裝在裝置上的任何應用來回應, 只要這個應用滿足在各個Intent(意圖)參數中指定的action(行動)的中繼資料規範,想瞭解更多資訊, 可以去看Interacting with Other Apps課程
Intent(意圖)可以傳遞各種各樣的以索引值對形式出現的集合,可以稱它為extras,putExtra()方法用字元竄作為它的key,第二個參數作為它的值為了在下一個Activity中擷取extra(附加的)資料,你應該定義一個公用常量作為key(鍵),ok,在MyFirstActivity類的頂部定義一個名為EXTRA_MESSAGE的常量:
public class MyFirstActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myapp.MESSAGE";
...
}
為使extras鍵唯一,使用你應用的包名作為extras鍵的首碼是一個很好的做法,因為你的應用可能需要跟其他應用互動。
Start the Second Activity-啟動第二個Activity
啟動一個Activity,你只需要調用startActivity()方法然後傳入你的Intent(意圖)系統接收到你的請求後會執行個體化在Intent中指定的Activity,包含這個方法擁有的,被Send(發送)按鈕調用的完整sendMessage()方法現在就像這樣:
/** 當使用者點擊Send按鈕時調用 */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
現在你需要去建立一個DisplayMessageActivity支援程式能夠執行起來
Create the Second Activity-建立第二個Activity
在你的項目中,在src/<package-name>/路徑下建立一個名為DisplayMessageActivity.java的類。
註:在Eclipse中,在src/路徑下點滑鼠右鍵選中New > Class,輸入DisplayMessageActivity,並且指定繼承android.app.Activity 。
在這個類中,添加onCreate()回調方法:
public class DisplayMessageActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
所有Activity的子類都必須實現onCreate()方法,當系統建立Activity執行個體時就會調用該方法,這個方法是你必須定義activity布局以及初始化必要activity組件的地方。
Add it to the manifest-將Activity加入manifest(清單)檔案
你必須在manifest(清單)檔案,AndroidManifest.xml中使用<activity>元素宣告你所有的Activity;因為DisplayMessageActivity是由一個明確的Intent(意圖)調用的,所以它不需要任何intent filters(意圖過濾器)(intent filters,你可以在manifest檔案中聲明MyFirstActivity的地方看到)如此DisplayMessageActivity就可以在<application>元素中用一句很簡單的代碼聲明;
<application ... >
<activity android:name="com.example.myapp.DisplayMessageActivity" />
...
</application>
這個app(應用)現在就可以運行了,因為第一個Activity中的Intent現在可以解析DisplayMessageActivity類了,如果你現在運行app,點擊Send(發送)按鈕啟動,第二個Activity,它不會顯示任何東西;
Receive the Intent-擷取Intent(意圖)
每一個被Intent調用的Activity,不管使用者將它導航到哪,你都可以在啟動的Activity中通過getIntent()方法得到Intent以及Intent包含的資料。在DisplayMessageActivity類的onCreate()方法中,得到intent以及MyFirstActivity提供的附加資訊:
Intent intent = getIntent();
String message = intent.getStringExtra(MyFirstActivity.EXTRA_MESSAGE);
Display the Message-顯示資訊
在螢幕上顯示資訊,建立一個TextView組件,並且使用setText()設定它的值,然後通過setContentView()方法將TextView作為root(根)視圖添加到Activity的布局。
DisplayMessageActivity完整的onCreate()方法現在看起來如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 從intent中擷取資訊
Intent intent = getIntent();
String message = intent.getStringExtra(MyFirstActivity.EXTRA_MESSAGE);
// 建立TextView對象
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
setContentView(textView);
}
現在你可以運行app,在文本中輸入資訊,點擊Send(發送)按鈕,ok,現在就可以在第二Activity上看到資訊了。