首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Activity 間傳遞資料:Intent putExtra 與 startActivityForResult 模式

     編輯:程式設計綜合問答

問題現象

子 Activity 透過 setResult + finish 傳回資料,主 Activity onActivityResult 取得 EditText 為空。

根本原因分析

  1. 啟動方式錯誤:原碼 Intent intent = new Intent(); intent.setClass(...) 未指定 startActivityForResult,導致非回傳模式。
  2. 請求碼缺失:startActivityForResult(intent, REQUEST_CODE) 需要請求碼識別來源。
  3. 結果碼檢查:onActivityResult 需判斷 resultCode == RESULT_OK。

標準雙向傳遞模式

主 Activity → 子 Activity


// 主 Activity
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("key", "value");
startActivityForResult(intent, REQUEST_CODE_SUB);  // 關鍵:使用 startActivityForResult

子 Activity → 主 Activity


// 子 Activity
Intent result = new Intent();
result.putExtra("return_key", "return_value");
setResult(RESULT_OK, result);  // 設定結果碼與資料
finish();

主 Activity 接收


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_SUB && resultCode == RESULT_OK && data != null) {
        String value = data.getStringExtra("return_key");
        editText.setText(value);
    }
}

現代替代:Activity Result API (AndroidX)


// 主 Activity (在 onCreate 中註冊)
ActivityResultLauncher subLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK && result.getData() != null) {
            String value = result.getData().getStringExtra("return_key");
            editText.setText(value);
        }
    }
);

// 啟動
subLauncher.launch(new Intent(this, SubActivity.class).putExtra("key", "value"));

優勢:型別安全、生命週期感知、無請求碼衝突、程式碼集中。

關鍵檢查清單

  • 啟動用 startActivityForResult / ActivityResultLauncher。
  • 子頁 setResult(RESULT_OK, intent) 後 finish()。
  • 主頁檢查 requestCode、resultCode、data != null。
  • Intent.putExtra 鍵名拼寫完全一致。

掌握「請求碼 + 結果碼 + 資料包」三要素,Activity 間資料流轉才能可靠運作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved