iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
1
Software Development

[Andriod] Andriod Studio 從入門到進入狀況系列 第 26

[Day 25] 我的第一個Android程式 - BMI程式設計(十六) 換頁的動作(二)

今天來講解昨天的程式碼,
首先是MainActivity.java的部份:

Bundle bundle = new Bundle();
...
intent.putExtras(bundle);

相依的Activity會附帶傳送額外資訊到新的Activity,這些額外訊息是靠著Intent物件來攜帶的,傳送Intent時,我們可以在其上附加一些訊息,比如說本例中我們從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給Report Activity後作計算。這些附加在Intent上的訊息都儲存在bundle物件實體中,透過intent.putExtras(bundle)敘述,我們將bundle物件實體附加在intent物件實體上,隨著Intent送出而送出。

bundle.putString("KEY_HEIGHT", num_height.getText().toString());
bundle.putString("KEY_WEIGHT", num_weight.getText().toString());
  • 這段程式是實際用來附加資料的程式碼。將使用者輸入的身高、體重值,儲存到bundle物件實體中。
  • Bundle類別其實是一種特別定義的映射(map)類別。KEY_HEIGHT和KEY_WEIGHT是我們為儲存在bundle物件實體中的身高、體重值,所指定的識別符號。在這裡,我們直接把身高、體重值都儲存成字串。因為整個程式都是我們控制,到時候在接收Activity一端,再透過KEY_HEIGHT和KEY_WEIGHT這兩個識別符號來取得實際的身高、體重值。讀出的值也是字串,等值讀出來以後,再去做型別轉換就好了。當然你也可以直接把身高、體重值存成數字。
  • Bundle型別額外提供了很多API,在傳送Intent時,使用Bundle物件實體來攜帶資料,相當方便。

ReportActivity.java的部份:

Bundle bundle = this.getIntent().getExtras();

透過this.getIntent()得到傳來的Intent物件實體,然後使用getExtras()函式取得附加在Intent上的bundle物件

double height = Double.parseDouble(bundle.getString("KEY_HEIGHT"))/100;
double weight = Double.parseDouble(bundle.getString("KEY_WEIGHT"));

透過識別符號取得儲存在bundle中的資料。由於我們傳參數過來的時候使用的是字串格式,所以要做一個型別轉換,將參數從字串轉換成雙倍精數浮點數

private Button.OnClickListener backtoMain = new Button.OnClickListener()
{
    public void onClick(View v)
    {
        ReportActivity.this.finish();
    }
};

當按下backMain按鈕元件後,結束ReportActivity,就會顯示原本的MainActivity

在這邊先休息一下,
明天開始進入番外篇,
稍微分享一下在Android活動(Activity)的生命週期,
這是蠻基本也是蠻重要的觀念.


上一篇
[Day 24] 我的第一個Android程式 - BMI程式設計(十五) 換頁的動作(一)
下一篇
[Day 26] Android程式設計番外篇 - 活動的生命週期(一)
系列文
[Andriod] Andriod Studio 從入門到進入狀況33

尚未有邦友留言

立即登入留言