iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
3
Software Development

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

[Day 29] 我的第一個Android程式 - BMI程式設計(十八) 從其他頁面帶資料回來(二)

今天來講解一下昨天的程式碼,

MainActivity.java

onClcik(view v)事件

startActivityForResult(intent, ACTIVITY_REPORT);

我們在呼叫另一個Activity時,改採用startActivityForResult方法,傳入一個Intent類別,並指定一個呼叫這個Activity的識別碼,Android框架會找出合適的Activity,並傳送Intent給這個Activity來負責處理

onActivityResult函式

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);
    if(resultCode == RESULT_OK)
    {
        if(requestCode == ACTIVITY_REPORT)
        {
            Bundle bundle = intent.getExtras();
            String bmi = bundle.getString("BMI");
            show_suggest.setText(getString(R.string.advice_history) + bmi);
            num_weight.setText(R.string.input_empty);
            num_weight.requestFocus();
        }
    }
}

在負責呼叫的Activity中,加入處理返回代碼的onActivityResult方法。onActivityResult傳入三個參數

  • requestCode:呼叫該Activity時使用的識別碼

  • resultCode:該Activity傳回的回傳瑪

  • intent:該Activity傳回的Intent類別資料

  • onActivityResult函式與startActivityForResult函式是共生的關係,startActivityForResult函式負責呼叫其他Activity,而onActivityResult函式來處理被呼叫的Activity所傳回的資訊
    當被呼叫的Activity完成工作時,就會通知負責呼叫的Activity,負責呼叫的Activity會使用onActivityResult函式來處理被呼叫的Activity所傳回的訊息

  • onActivityResult函式會根據收到的requestCode來判斷是哪個呼叫的Activity傳回的資料,這裡傳進來的requestCode就是我們啟動另一個Activity時使用的識別碼。

  • 之後根據resultCode的結果來做後續處理,Android內建定義的有RESULT_OK、RESULT_CANCELLED兩種resultCode。但其實resultCode只是數字而已,我們也可以自行定義,好讓接收結果的一端的程式,能根據更多的結果狀態來做出反應。

以下是每一行的解說

Bundle bundle = intent.getExtras();

從Intent中取出Bundle

String bmi = bundle.getString("BMI");

從bundle中取出BMI值

show_suggest.setText(getString(R.string.advice_history) + bmi);

在show_suggest介面元件中顯示BMI值

num_weight.setText(R.string.input_empty);

清空體重輸入欄

num_weight.requestFocus();

把預設的遊標指向體重輸入欄,方便使用者做下一次輸入

ReportActivity.java

setResult(RESULT_OK, intent);

代表回傳OK的結果,並傳一個Intent回到原本呼叫的MainActivity,這個Intent帶有BMI值的計算結果


上一篇
[Day 28] 我的第一個Android程式 - BMI程式設計(十七) 從其他頁面帶資料回來
下一篇
[Day 30] Android程式設計完結篇 - 改變API版本的方式(一)
系列文
[Andriod] Andriod Studio 從入門到進入狀況33

2 則留言

0
暐翰
iT邦大師 1 級 ‧ 2018-11-04 22:46:22

一起完賽 ! /images/emoticon/emoticon42.gif/images/emoticon/emoticon42.gif/images/emoticon/emoticon42.gif

小魚 iT邦高手 1 級‧ 2018-11-05 07:29:19 檢舉

真是驚險刺激呢
/images/emoticon/emoticon05.gif

0
神Q超人
iT邦新手 1 級 ‧ 2018-11-04 22:58:48

一起到達三十篇!恭喜大大/images/emoticon/emoticon64.gif

小魚 iT邦高手 1 級‧ 2018-11-05 07:29:32 檢舉

真是驚險刺激呢
/images/emoticon/emoticon05.gif

我要留言

立即登入留言