我正在尝试创建自定义LinearLayout(在Android上),但在我的主Activity类中尝试使用它时,我一直遇到编译器错误。扩展的LinearLayout需要构造函数传递给它的Context,但我不知道从哪里获取该Context。我看到的所有示例都显示了此指针从Activity中传递。我做错了什么?
编译器错误
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);
}
}
解决方案:
看起来问题是两个问题。
答案 0 :(得分:2)
问题是你没有在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没有不带参数的构造函数,因此必须显式调用super以避免编译错误。
答案 1 :(得分:0)
我不是100%肯定,但你定义的构造函数需要两个参数:
public BoardLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
但是,您调用的构造函数只传递一个参数:
BoardLayout board = new BoardLayout(this);
如果要调用新构造函数,则需要传入第二个参数的值:
BoardLayout board = new BoardLayout(this,null);
我不熟悉扩展LinearLayout所以我不确定如何为AttributeSet