【问题标题】:Android: can't find constructor for custom LinearLayoutAndroid:找不到自定义 LinearLayout 的构造函数
【发布时间】:2011-01-03 22:39:15
【问题描述】:

我正在尝试创建一个自定义 LinearLayout(在 Android 上),但在我的主 Activity 类中尝试使用它时,我不断收到编译器错误。扩展的 LinearLayout 需要构造函数传递给它的 Context,但我不知道从哪里获取该 Context。我看到的所有示例都显示了 this 指针从 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);
    }
}

解决方案:

看起来问题是两个问题。

  1. 构造函数没有 void 类型(我的粗心错误)。
  2. 必须调用“super(context)”作为构造函数中的第一条指令。

【问题讨论】:

  • 你在导入你的 BoardLayout 类吗?

标签: java android android-layout


【解决方案1】:

问题是您没有在 BoardLayout 中接受 1 个参数的构造函数。正如 cmets 中所指出的,第一个不是构造函数而是方法。

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 个参数的 BoardLayout 构造函数;)
【解决方案2】:

我不是 100% 确定,但是您定义的构造函数需要两个参数:

public BoardLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}

但是你调用的构造函数只被传递了一个参数:

BoardLayout board = new BoardLayout(this);

如果你想调用你的新构造函数,你需要为第二个参数传入一个值:

BoardLayout board = new BoardLayout(this,null);

我不熟悉扩展 LinearLayout,所以我不确定如何为 AttributeSet 获得合适的值

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 2011-02-22
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多