onListItemClick 僅能取得單一字串(getItem(position) 回傳 Adapter 的資料物件,此處為 String),需傳遞圖片、名稱、價格等完整資訊到下一個 Activity。
public class PropertyItem implements Serializable {
private String name;
private String imageUrl;
private double price;
// 其他欄位...
// 建構子、getter/setter、toString()...
}
ArrayList items = new ArrayList<>();
// 解析 JSON 填充 items...
setListAdapter(new MobileArrayAdapter(this, items));
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
PropertyItem item = (PropertyItem) getListAdapter().getItem(position);
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("property_item", item); // 直接放入 Serializable 物件
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
PropertyItem item = (PropertyItem) getIntent().getSerializableExtra("property_item");
if (item != null) {
nameText.setText(item.getName());
priceText.setText(String.format("%.2f", item.getPrice()));
Glide.with(this).load(item.getImageUrl()).into(imageView);
}
}
// Kotlin 一鍵生成
@Parcelize
data class PropertyItem(
val name: String,
val imageUrl: String,
val price: Double
) : Parcelable
// 傳遞
intent.putExtra("property_item", item) // Parcelable 同樣支援 putExtra
// 接收
val item = intent.getParcelableExtra("property_item")
intent.putExtra("name", item.getName());
intent.putExtra("price", item.getPrice());
intent.putExtra("image_url", item.getImageUrl());
// 接收時逐個 getStringExtra/getDoubleExtra...
缺點:欄位多時程式碼冗長、易漏欄位、重構困難。
Parcelable(Android 推薦,高效)或 Serializable(簡單,較慢)。掌握「資料模型序列化跨 Activity 傳遞」模式,是 Android 多頁面資料流轉的核心技能。