啟動新 Activity 並傳值
// 在 MainActivity 中
Intent intent = new Intent(MainActivity.this, ShowProcedure.class);
intent.putExtra("key_string", "要傳遞的字符串");
intent.putExtra("key_x", 0);
intent.putExtra("key_y", 0);
startActivity(intent); // 無返回值跳轉
// 若需返回結果
startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE 自定義 int
目標 Activity 取值
// 在 ShowProcedure.onCreate() 中
Intent intent = getIntent();
String str = intent.getStringExtra("key_string"); // 若無該 key 返回 null
int x = intent.getIntExtra("key_x", -1); // 第二參數為默認值
int y = intent.getIntExtra("key_y", -1);
返回數據給上一頁
// 在 ShowProcedure 中(如按鈕點擊或 onBackPressed)
Intent result = new Intent();
result.putExtra("result_key", "返回的數據");
setResult(RESULT_OK, result);
finish();
// 在 MainActivity 中接收
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String back = data.getStringExtra("result_key");
}
}
常用 Put/Get 對照表
| 類型 | Put 方法 | Get 方法 |
| String | putExtra(key, value) | getStringExtra(key) |
| int | putExtra(key, value) | getIntExtra(key, default) |
| boolean | putExtra(key, value) | getBooleanExtra(key, default) |
| Parcelable | putExtra(key, value) | getParcelableExtra(key) |
| Serializable | putExtra(key, value) | getSerializableExtra(key) |
| byte[] | putExtra(key, value) | getByteArrayExtra(key) |
注意事項
- Key 唯一性:建議定義
public static final String KEY_XXX = "pkg.name.KEY_XXX" 避免衝突。
- 數據大小限制:Intent 承載數據建議 < 1MB(Binder 事務緩衝區限制),大數據請用
SharedPreferences、File、ViewModel 或 ContentProvider 共享。
- Parcelable 比 Serializable 快:自定義對象傳遞首選實現
Parcelable(Android Studio 可自動生成)。