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

Android 自定義 View 在 XML 中實例化失敗:內部類需獨立為 public 頂層類

     編輯:程式設計綜合問答

錯誤現象

The following classes could not be instantiated: com.example.wifidetection.MyPaint.MyView

原因

MyView 定義為 MyPaint 的內部類(非 static),LayoutInflater 通過反射實例化時需要無參構造函數且類可訪問。內部類隱含外部類引用,無法直接反射構造。

解決方案

  1. 將 MyView 移至獨立文件 MyView.java,聲明 public class MyView extends View。
  2. 或聲明為 static 內部類(不推薦,XML 仍需完整類名 com.example.MyPaint$MyView,易出錯)。

修正後 XML



構造函數規範


public class MyView extends View {
    public MyView(Context context) { super(context); }
    public MyView(Context context, AttributeSet attrs) { super(context, attrs); }
    public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
    // API 21+ 需第四個構造函數
    public MyView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved