2011-01-03 6 views
1

Ich versuche, ein benutzerdefiniertes LinearLayout (auf Android) zu erstellen, aber ich erhalte immer Compilerfehler, wenn ich versuche, es in meiner Hauptaktivitätsklasse zu verwenden. Das erweiterte LinearLayout benötigt einen Context, der vom Konstruktor übergeben wird, aber ich weiß nicht, wo ich diesen Context erhalten soll. Alle Beispiele, die ich sehe, zeigen die Weitergabe des this-Zeigers aus der Aktivität. Was mache ich falsch?Android: Kann Konstruktor für benutzerdefinierte LinearLayout nicht finden

Compilerfehler

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); 
    } 
} 

Lösung:

Sieht aus wie das Problem zwei Probleme waren.

  1. Konstruktoren haben keinen Typ void (unvorsichtiger Fehler meinerseits).
  2. Hatte "Super (Kontext)" als die erste Anweisung im Konstruktor aufrufen.
+0

importieren Sie Ihre BoardLayout-Klasse? – RoflcoptrException

Antwort

2

Das Problem ist, einen richtigen Wert zu erhalten, dass Sie nicht einen Konstruktor haben, die 1 Argument in Boardlayout nimmt. Wie in den Kommentaren erwähnt, ist der erste kein Konstruktor, sondern eine Methode.

Denken Sie daran, dass Java implizit super() ohne Argumente aufruft, wenn Sie nicht explizit super aufrufen. Da LinearLayout keinen Konstruktor hat, der keine Argumente annimmt, müssen Sie super explizit aufrufen, um Kompilierungsfehler zu vermeiden.

+0

Die erste ist kein Konstruktor, da sie einen Rückgabetyp hat und daher eine Methode ist. –

+0

ah ja. sry, ich habe das vermisst. Aber dann ist das Problem noch klarer. Es gibt keinen BoardLayout-Konstruktor, der 1 Argument benötigt;) – RoflcoptrException

+0

Bearbeitete meine Antwort, um das tatsächliche Problem zu zeigen. – RoflcoptrException

0

Ich bin nicht 100% sicher, aber der Konstruktor von Ihnen definierten erfordert zwei Parameter:

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

jedoch der Konstruktor Sie anrufen, wird nur ein Parameter übergeben wird:

BoardLayout board = new BoardLayout(this); 

Wenn Sie Ihren neuen Konstruktor aufrufen möchten, müssen Sie einen Wert für den zweiten Parameter übergeben:

Ich bin mit der Erweiterung ein Linearlayout nicht vertraut, so bin ich nicht sicher, wie für die AttributeSet

Verwandte Themen