Android: не удается найти конструктор для пользовательского LinearLayout - PullRequest
1 голос
/ 04 января 2011

Я пытаюсь создать собственный LinearLayout (на Android), но продолжаю получать ошибки компилятора, когда пытаюсь использовать его в своем основном классе Activity. Расширенному LinearLayout нужен контекст, переданный ему конструктором, но я не знаю, где взять этот контекст. Все примеры, которые я вижу, показывают передачу указателя 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)" как первую инструкцию в конструкторе.

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Проблема в том, что у вас нет конструктора, который принимает 1 аргумент в BoardLayout. Как указано в комментариях, первый - это не конструктор, а метод.

public class BoardLayout extends LinearLayout {
   public void BoardLayout(Context context) {
      // initialisation code
   }
   public BoardLayout(Context context, AttributeSet attrs) {
      super(context, attrs);
   }
}

Имейте в виду, что Java неявно вызывает super () без аргументов, если вы явно не вызываете super. Поскольку LinearLayout не имеет конструктора, который не принимает аргументов, вы должны явно вызывать super, чтобы избежать ошибок компиляции.

0 голосов
/ 04 января 2011

Я не уверен на 100%, но определенный вами конструктор требует двух параметров:

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

Однако вызываемому конструктору передается только один параметр:

BoardLayout board = new BoardLayout(this);

Если вы хотите вызвать новый конструктор, вам нужно передать значение для второго параметра:

BoardLayout board = new BoardLayout(this,null);

Я не знаком с расширением LinearLayout, поэтому я не уверен, как получить правильное значение для AttributeSet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...