2011-01-03 3 views
1

J'essaye de créer un LinearLayout fait sur commande (sur Android), mais je continue à recevoir des erreurs de compilateur en essayant de l'employer dans ma classe principale d'activité. Le LinearLayout étendu a besoin d'un Context qui lui est passé par le constructeur, mais je ne sais pas où obtenir ce Context. Tous les exemples que je vois montrent le passage de ce pointeur de l'activité. Qu'est-ce que je fais mal?Android: ne peut pas trouver le constructeur pour custom LinearLayout

d'erreur du compilateur

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

Solution:

On dirait que le problème était deux problèmes.

  1. Les constructeurs n'ont pas de type void (erreur négligente de ma part).
  2. Doit appeler "super (contexte)" comme première instruction dans le constructeur.
+0

importez-vous votre classe BoardLayout? – RoflcoptrException

Répondre

2

Le problème est que vous ne disposez pas d'un constructeur qui prend 1 argument en BoardLayout. Comme indiqué dans les commentaires, le premier n'est pas un constructeur mais une méthode. Gardez à l'esprit que Java appelle implicitement super() sans argument, si vous n'appelez pas explicitement super. Puisque LinearLayout n'a pas un constructeur qui ne prend pas d'arguments, vous devez appeler super explicitement pour éviter les erreurs de compilation.

+0

Le premier n'est pas réellement un constructeur car il a un type de retour et est donc une méthode. –

+0

ah oui. sry j'ai raté ça. Mais alors le problème est encore plus clair. Il n'y a aucun constructeur de BoardLayout qui prend 1 argument;) – RoflcoptrException

+0

Édité ma réponse pour montrer le problème réel. – RoflcoptrException

0

Je ne suis pas sûr à 100%, mais le constructeur que vous avez défini nécessite deux paramètres:

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

Cependant le constructeur que vous appelez est uniquement passé un paramètre:

BoardLayout board = new BoardLayout(this); 

Si vous souhaitez appeler votre nouveau constructeur, vous devez transmettre une valeur pour le deuxième paramètre:

BoardLayout board = new BoardLayout(this,null); 

Je ne suis pas familier avec l'extension d'un LinearLayout donc je ne suis pas sûr de savoir comment obtenir une bonne valeur pour le AttributeSet

Questions connexes