iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
自我挑戰組

在Android Studio 3.x版開發Android系統的開發記事系列 第 8

在Android Studio 3.x版開發Android系統的開發記事-如何傳送資料到另外一個Activity

  • 分享至 

  • xImage
  •  
在開發Android時,通常都會有好幾個Activity,而要如何傳值也是一門學問。今天就來討論有那些傳值的方式。

第一種方式,直接用Intent物件的pubExtra函式,直接將輸入的值或資料直接帶到另一個Activity。
第二種方式,可以用Bundle物件,組成好幾個資料,再一次帶過去。也可以組成陣列,再用Bundle物件,帶過去。

請在Android Studio 3.x版,新建一個專案。增加一個Empty Activity。再增加一個Activity,選取「Empty Activity」如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20181014/20000953nfkIU8b7Hf.jpg

https://ithelp.ithome.com.tw/upload/images/20181014/200009530d0e2vlPaa.jpg
在原來的Activity,再拉一個EditText輸入文字元件及一個Button,來呈現出類似這樣的畫面,分別重新改id名稱。如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181014/20000953IljJow3tQh.jpg

https://ithelp.ithome.com.tw/upload/images/20181014/200009533WXCItKQ8g.jpg
另一個新增加的Activity,就不用拉任何元件。傳入的值,就用Toast來顯示即可。完整的程式碼如下:

第一個Activity

EditText txt_name;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txt_name = (EditText)findViewById(R.id.txtname);
}

public void prc_change(View v) {

//        //傳值到第二個Activity
//        Intent it = new Intent();
//        it= new Intent(this,Main2Activity.class);
//
//        it.putExtra("pname",txt_name.getText().toString());
//
//        startActivity(it);

//        //傳值到第二個(用Bundle物件)
//        Intent it = new Intent();
//        it= new Intent(this,Main2Activity.class);
//
//        Bundle objbundle = new Bundle();
//        objbundle.putInt("pnumber",123456789);
//        objbundle.putString("pname",txt_name.getText().toString());
//
//        it.putExtras(objbundle);
//        startActivity(it);

        //傳值到第二個(用陣列)
        Intent it = new Intent();
        it= new Intent(this,Main2Activity.class);

        int array[] = {1,2,3};
        Bundle objbundle = new Bundle();
        objbundle.putIntArray("pnumber",array);

        it.putExtras(objbundle);
        startActivity(it);

    }

第二個Activity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

//        //取得第一個Activity,傳過來的值。
//        Intent it2 = getIntent();
//        prc_showmessage(it2.getStringExtra("pname"));

//        //取得第一個Activity,傳過來的值。(用Bundle物件)
//        Bundle objgetbundle = this.getIntent().getExtras();
//
//        int intnumber = objgetbundle.getInt("pnumber");
//        String strname = objgetbundle.getString("pname");
//
//        prc_showmessage("number:" + String.valueOf(intnumber) + ",name=" + strname);

        //取得第一個Activity,傳過來的值。(用陣列)
        Bundle objgetbundle = this.getIntent().getExtras();

        int[] array = objgetbundle.getIntArray("pnumber");

        prc_showmessage("number:" + String.valueOf(array[0]));

    }

    //顯示訊息
    public void prc_showmessage(String strmessage)
    {
        Toast objtoast = Toast.makeText(this,strmessage, Toast.LENGTH_SHORT);
        objtoast.show();
    }

上述三種方式,直接都寫在程式中。要測試時,請將注解移除,就可以分別測試三個方式。下述為執行出來的結果。

第一種方式,第一個Activity,輸入資料後。在另一個Activity,就會Toast顯示輸入的資料。如下圖示:
https://ithelp.ithome.com.tw/upload/images/20181014/20000953VJpd08TbWK.jpg

https://ithelp.ithome.com.tw/upload/images/20181014/20000953Cs1RtcJhH5.jpg
第二種方式,第一個Activity,輸入資料後,再跟另一個資料組合成Bundle傳入另一個Activity,就會Toast顯示輸入Bundle物件的值。如下圖示:
https://ithelp.ithome.com.tw/upload/images/20181014/200009539AQoznoQze.jpg

https://ithelp.ithome.com.tw/upload/images/20181014/20000953ftlFF9LHPh.jpg

第三種方式,第一個Activity,直接將一個一維陣列組成Bundle傳入另一個Activity,就會Toast顯示輸入Bundle物件的陣列的值。如下圖示:
https://ithelp.ithome.com.tw/upload/images/20181014/20000953ra0IesYYWA.jpg


上一篇
在Android Studio 3.x版開發Android系統的開發記事-如何自訂AlertDialog
下一篇
在Android Studio 3.x版開發Android系統的開發記事-如何拍照並且儲存檔案
系列文
在Android Studio 3.x版開發Android系統的開發記事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言