Java 安卓:can';找不到自定义LinearLayout的构造函数
我试图创建一个定制的LinearLayout(在Android上),但在我的主Activity类中使用它时,我总是会遇到编译器错误。扩展的LinearLayout需要一个由构造函数传递给它的上下文,但我不知道从哪里获取该上下文。我看到的所有示例都显示了从活动传递此指针。我做错了什么 编译错误Java 安卓:can';找不到自定义LinearLayout的构造函数,java,android,android-layout,Java,Android,Android Layout,我试图创建一个定制的LinearLayout(在Android上),但在我的主Activity类中使用它时,我总是会遇到编译器错误。扩展的LinearLayout需要一个由构造函数传递给它的上下文,但我不知道从哪里获取该上下文。我看到的所有示例都显示了从活动传递此指针。我做错了什么 编译错误 MyApp.java:15: cannot find symbol symbol: constructor BoardLayout(com.test.program.MyApp) location: cla
MyApp.java:15: cannot find symbol
symbol: constructor BoardLayout(com.test.program.MyApp)
location: class com.test.program.BoardLayout
BoardLayout board = new BoardLayout(this);
BoardLayout.java
public class BoardLayout extends LinearLayout {
public void BoardLayout(Context context) {
// initialisation code
}
public BoardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
MyApp.java
public class MyApp extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BoardLayout board = new BoardLayout(this); // Doesn't work!
setContentView(board);
}
}
解决方案: 看来问题出在两个方面
我不是100%确定,但您定义的构造函数需要两个参数:
public BoardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
但是,您正在调用的构造函数只传递了一个参数:
BoardLayout board = new BoardLayout(this);
BoardLayout board = new BoardLayout(this,null);
如果要调用新构造函数,需要为第二个参数传入一个值:
BoardLayout board = new BoardLayout(this);
BoardLayout board = new BoardLayout(this,null);
我不熟悉扩展LinearLayout,因此我不确定如何为
属性集
获取正确的值。问题是您没有在BoardLayout中使用1个参数的构造函数。正如评论中指出的,第一个不是构造函数,而是方法
public class BoardLayout extends LinearLayout {
public void BoardLayout(Context context) {
// initialisation code
}
public BoardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
请记住,如果不显式调用super,Java会隐式调用super(),而不带任何参数。由于LinearLayout没有不带参数的构造函数,因此必须超级显式调用以避免编译错误。是否导入BoardLayout类?第一个类实际上不是构造函数,因为它具有返回类型,因此是方法。啊,是的。我错过了。但问题就更清楚了。没有接受1个参数的BoardLayout构造函数;)