轉換畫面後,按返回鍵回到前一個Activity時怎麼取得結果? onActivityResult方法

轉換Activity取得結果

其實,上一篇 來證明你會了吧,Atm專案之登入功能實務  所完成的功能實際上是有問題(bug)的,在登入功能畫面時假如按下返回鍵,也可以正常回到主畫面。這個問題出在從MainActivity中過去LoginActivity時,使用的是startActivity方法,而不是startActivityForResult方法,由方法名稱可看出來,startActivityForResult是到另一個畫面中並取得結果(資料)的,在本例的登入功能應該使用這一個方法才是。

一個主功能的Activity可能會轉換到不同的畫面後,再回到主功能畫面後若需要取得特定的結果,使用startActivityForResult方法,可達成這類的需求,如下圖:

當畫面轉換至登入功能後,在結束的地方,以程式碼撰寫,並把欲傳回主功能的資料放在Intent中,再結束Activity,當回到主功能時,會自動呼叫「onActivityResult方法」,如下圖:

轉換Activity並取得結果的設計方式,有以下幾個步驟:

  1. 定義代表該功能的常數
  2. 呼叫startActivityForResult
  3. 在功能畫面結束之前設定返回值
  4. 回到主功能的onActivityResult方法

定義功能常數(int)

在MainActivity中新增一個類別層級常數FUNC_LOGIN,代表登入功能,如下:

呼叫startActivityForResult

在onCreate方法判斷尚未登入時,改以startActivityForResult方法啟動LoginActivity,如下圖:

上圖方法的第二個參數,使用上一步驟所定義的功能常數FUNC_LOGIN,如下:

   startActivityForResult(intent, FUNC_LOGIN);

在功能畫面結束之前設定返回值

開啟LoginActivity,在login方法中,在原本呼叫finish方法之前,加入程式碼:

上圖程式碼第39與40行將帳號與密碼放入Intent物件中,第41行再呼叫Activity的setResult方法,設定這一個功能畫面的結果為RESULT_OK,並把Intent物件放入結果中,目的是在功能結束後,回去MainActivity後仍可得到結果。

回到主功能的onActivityResult方法

回到MainActivity中,按下覆寫方法的組合鍵「Ctrl+O」,再選擇覆寫onActivityResult方法,如下圖:

覆寫完成後,onActivityResult方法如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
   
}

方法內傳入參數的requestCode即是第一定義與第二步驟所傳遞的功能常數,第二與第三個參數則是由第三步驟在LoginActivity結束前所設定的RESULT_OK與Intent物件,參數名稱為resultCode與data。

接下來應該先判斷是否是requestCode是否為FUNC_LOGIN,是的話再進一步判斷resultCode是否為RESULT_OK,最後再取得Intent中的資料,程式碼如下:

    @Override
    protected void onActivityResult(int requestCode,
                                    int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FUNC_LOGIN){
            if (resultCode == RESULT_OK){
                String uid = data.getStringExtra("LOGIN_USERID");
                String pw = data.getStringExtra("LOGIN_PASSWD");
                Log.d("RESULT", uid + "/" + pw);
            }else{
                finish();
            }
        }
    }

執行,並輸入帳號jack與密碼1234後,回到MainActivity之後檢視LogCat,將可找到如下圖的Log資料:

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *