Al crear una vista personalizada, he notado que muchas personas parecen hacerlo de esta manera:¿Debo llamar a super() o llamar a this() para los constructores de vista personalizada de Android?
public MyView(Context context) {
super(context);
// this constructor used when programmatically creating view
doAdditionalConstructorWork();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// this constructor used when creating view through XML
doAdditionalConstructorWork();
}
private void doAdditionalConstructorWork() {
// init variables etc.
}
Mi problema con esto es que me impide hacer mi variables final. ¿Alguna razón para no hacer lo siguiente?
public MyView(Context context) {
this(context, null);
// this constructor used when programmatically creating view
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// this constructor used when creating view through XML
}
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// this constructor used where?
// init variables
}
he sido capaz de crear la vista muy bien a través de XML y por medio de código, pero no estoy seguro de si hay alguna desventaja de este enfoque. ¿Funcionará esto en todos los casos?
Hay another part to this question
Llamar 'this' solo invoca a otro constructor de la clase actual. Creo que esto es algo de lo que no te habías dado cuenta. Así 'this (context, null);' llama 'public MyView (Context context, AttributeSet attrs) {' que a su vez llama 'public MyView (Context context, AttributeSet attrs, int defStyle) {'. Las invocaciones de este constructor no son muy comunes en el lenguaje Java, pero no veo ninguna razón para que esto no funcione. –
Me di cuenta de que solo me preocupaban los parámetros. :) –