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

Android 自訂 View 空指標異常:findViewById 傳入錯誤資源 ID

     編輯:程式設計綜合問答

錯誤訊息 NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference 指出 LinearLayout l 為 null。原因在於 findViewById(R.layout.linearlayout) 傳入的是 版面配置資源 ID(R.layout.xxx),而非 View 元件 ID(R.id.xxx)。

錯誤程式碼

setContentView(R.layout.linearlayout);
LinearLayout l = (LinearLayout) findViewById(R.layout.linearlayout); // 錯誤

修正步驟

  1. 在版面 XML(res/layout/linearlayout.xml)的根 LinearLayout 加入 android:id="@+id/lin"。
  2. Java 程式碼改為 findViewById(R.id.lin)。

修正後的版面 XML 片段

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/lin"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- 子元件 -->
</LinearLayout>

修正後的 Activity 程式碼

setContentView(R.layout.linearlayout);
LinearLayout l = (LinearLayout) findViewById(R.id.lin); // 正確
DrawView dv = new DrawView(this);
dv.setMinimumHeight(300);
dv.setMinimumWidth(300);
l.addView(dv);

補充說明

  • R.layout.xxx 對應整個 XML 檔案,R.id.xxx 對應 XML 中某個元件的 android:id。
  • 自訂 View DrawView 需實作 onDraw(Canvas) 與觸控事件,範例中已正確覆寫。

記住:findViewById 只能找元件 ID,不能找版面 ID,這是新手最常犯的錯誤之一。

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