錯誤代碼
public class MyView extends View {
MainActivity mainAc = new MainActivity(); // 錯誤:建立新實例,非當前 Activity
// 使用 mainAc.startPaint[0] 總是預設值 0
}
正確做法:Intent 傳遞資料
// MainActivity 啟動
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("paintData", paintArray); // 可序列化陣列
startActivity(intent);
// SecondActivity 接收
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int[] data = getIntent().getIntArrayExtra("paintData");
setContentView(new MyView(this, data)); // 透過建構子傳入
}
// MyView 建構子
public MyView(Context context, int[] data) {
super(context);
this.data = data; // 使用傳入的真實資料
}
替代方案
- ViewModel:跨 Activity/Fragment 共享資料,生命週期感知。
- 單例/靜態持有者:簡單場景可用,但需注意記憶體洩漏與多進程問題。