要從一個 Activity 中呼叫另一個 Activity,
就必須使用 Intent 物件,
而要從一個 Activity 傳值另一個 Activity,
就必須使用 Bundle 物件,
請參考以下範例 (這裡就不列出 Layout XML 檔案內容了) :
來源 Activity 程式碼
public class helloWorld extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設定 Layout 為 main.xml
setContentView( R.layout.main );
// 按鈕物件
Button b1 = (Button)findViewById( R.id.button1 );
// Button 的 OnClick Trigger
b1.setOnClickListener( new OnClickListener(){
public void onClick(View v) {
// 指定要呼叫的 Activity Class
Intent newAct = new Intent();
newAct.setClass( helloWorld.this, helloWorld2.class );
// 建立 Bundle 物件
Bundle bData = new Bundle();
// 寫入資料到 Bundle 中
bData.putDouble( "num1", Integer.parseInt(
((EditText)findViewById( R.id.num1 ))
.getText()
.toString()
)
);
bData.putDouble( "num2", Integer.parseInt(
((EditText)findViewById( R.id.num2 ))
.getText()
.toString()
)
);
// 將 Bundle 指定到 Intent
newAct.putExtras( bData );
// 呼叫新的 Activity Class
startActivity( newAct );
// 不結束原先的 Activity Class
// 這樣按返回鍵時, 就可以回到這個 Activity 了
//helloWorld.this.finish();
}
});
}
}
目的 Activity 程式碼
public class helloWorld2 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設定 Layout 為 main2.xml
setContentView( R.layout.main2 );
// 取得 Bundle 物件
Bundle bData = this.getIntent().getExtras();
// 取得 Bundle 中的資料
Double num1 = bData.getDouble( "num1" );
Double num2 = bData.getDouble( "num2" );
// 顯示結果
((TextView)findViewById( R.id.resultText )).setText( num1 + num2 + "" );
}
}
AndroidManifest.xml 要加入第二個 Activity, 不然呼叫時會有問題 :
範例結果 :