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

Android LayoutInflater 切換 Activity 失敗:正確在 onCreate 中設置佈局

     編輯:程式設計綜合問答

錯誤代碼

// MyPaint.java
private View paint_layout; // 字段未初始化,為 null

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(paint_layout); // 傳入 null -> 崩潰
}

修正方案

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.paint_layout); // 直接使用資源 ID
    // 或
    // View view = LayoutInflater.from(this).inflate(R.layout.paint_layout, null);
    // setContentView(view);
}

原因分析

  • `paint_layout` 字段僅聲明未賦值,默認 `null`。
  • `setContentView(View)` 接受已 inflate 好的 View 對象,傳入 `null` 導致 `NullPointerException` 或窗口管理器崩潰。
  • 在 `MainActivity` 中用 `LayoutInflater` 預先 inflate 並持有引用屬於「過度設計」,Activity 之間應通過 `Intent` 傳遞數據,各自在 `onCreate` 中 `setContentView(R.layout.xxx)`。

最佳實踐

  1. 每個 Activity 對應一個佈局 XML(`R.layout.xxx`)。
  2. `Intent` 傳遞必要數據(ID、參數),目標 Activity 根據數據查詢/渲染。
  3. 共用 UI 組件提取為 `` 或自定義 View/Fragment 復用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved