Android開發筆記-Activity間互相傳值

內容說明:在頁面之間互相傳值

資料來源:Android南部工作坊

在Android的應用程式裡,會有一個Bundle的物件,它就像是用來儲存全域變數的一個地方,我們的程式在 onCreate 的時候就會看到裡面含有傳入的參數 Bundle savedInstanceState。

首先參考「轉換頁面」一文,建立新的頁面,並且將最後一段呼叫頁面的程式碼改成下面的程式,增加 Bundle 參數傳遞資料,並且要求回傳值。

Intent intent = new Intent();
intent.setClass(main.this, page2.class);
//設定傳送參數
Bundle bundle = new Bundle();
bundle.putString("name1", "value1");
intent.putExtras(bundle);   //將參數放入intent

startActivityForResult(intent, 0);  //呼叫page2並要求回傳值

來到page2,在 onCreate 方法中,可以使用下面程式碼來取得參數:

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras(); //取得Bundle
txt_hello.setText(bundle.getString("name1"));   //輸出Bundle內容

如果要在page2加入回傳值,一樣使用putString加入。此時在Bundle中存在name1和name2。

bundle.putString("name2", "value2");
intent.putExtras(bundle);   //將name2放入Bundle
page2.this.setResult(Activity.RESULT_OK, intent);   //回傳RESULT_OK
page2.this.finish();    //關閉Activity

回到main主頁面,參考讀取QR Code,增加 onActivityResult 方法,在裡面加入下面程式碼來取得回傳值:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
 
        if (requestCode == 0 && resultCode == Activity.RESULT_OK) {
            Bundle bundle = data.getExtras();
            txt_hello.setText(bundle.getString("name2"));
        }
    }