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

Android Intent 傳遞參數啟動 Activity 完整指南

     編輯:程式設計綜合問答

Activity 間傳遞資料核心機制:Intent.putExtra(key, value) 存入,getIntent().getTypeExtra(key) 取出。支援基本型別、String、Parcelable、Serializable、陣列等。

基本用法


// 發送端
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("user_id", 12345);
intent.putExtra("user_name", "張三");
intent.putExtra("is_vip", true);
intent.putExtra("scores", new int[]{90, 85, 88});
startActivity(intent);

// 接收端 (DetailActivity.onCreate)
Intent intent = getIntent();
int userId = intent.getIntExtra("user_id", -1); // 預設值 -1
String userName = intent.getStringExtra("user_name");
boolean isVip = intent.getBooleanExtra("is_vip", false);
int[] scores = intent.getIntArrayExtra("scores");

支援資料類型完整表

類型存入方法取出方法備註
byteputExtra(key, val)getByteExtra(key, def)
shortputExtra(key, val)getShortExtra(key, def)
intputExtra(key, val)getIntExtra(key, def)
longputExtra(key, val)getLongExtra(key, def)
floatputExtra(key, val)getFloatExtra(key, def)
doubleputExtra(key, val)getDoubleExtra(key, def)
booleanputExtra(key, val)getBooleanExtra(key, def)
charputExtra(key, val)getCharExtra(key, def)
StringputExtra(key, val)getStringExtra(key)無預設值,可能回傳 null
CharSequenceputExtra(key, val)getCharSequenceExtra(key)
ParcelableputExtra(key, val)getParcelableExtra(key)高效、需實作 Parcelable
SerializableputExtra(key, val)getSerializableExtra(key)簡單但效能較差
陣列putExtra(key, array)getTypeArrayExtra(key)如 getIntArrayExtra
BundleputExtra(key, bundle)getBundleExtra(key)巢狀資料

進階:Parcelable 物件傳遞(高效)


@Parcelize
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val isVip: Boolean
) : Parcelable

// 發送
intent.putExtra("user", user)

// 接收
val user = intent.getParcelableExtra("user")

Java 手寫 Parcelable 較繁瑣,建議用 @Parcelize (Kotlin) 或 AutoParcel/Parceler 庫。

Bundle 封裝大量參數


Bundle bundle = new Bundle();
bundle.putInt("id", 1);
bundle.putString("name", "Test");
bundle.putParcelable("user", user);
intent.putExtras(bundle); // 或 intent.putExtra("bundle", bundle)

常見錯誤避雷

  • ❌ Key 拼寫不一致 → 定義 public static final String KEY_USER = "user"; 統一管理
  • ❌ 取出類型不符 → getIntExtra 讀 long 會截斷,務必對應
  • ❌ 忘記預設值 → getIntExtra(key, DEFAULT) 必填預設值
  • ❌ 傳遞大型 Bitmap → 超過 Binder 限制 (1MB),改用檔案/ContentProvider/共享記憶體

現代替代:Activity Result API / Navigation Safe Args

  • ActivityResultContracts.StartActivityForResult:類型安全啟動並接收結果
  • Navigation Component Safe Args:編譯期生成類型安全參數類別,強烈推薦新專案使用

掌握 Intent Extra 完整類型支援與最佳實踐,能構建健壯的 Activity 間通訊。

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