Custom Views en Android con Kotlin: Cómo construirlas (KDA 06)
Antonio Leiva

Cuando vimos el capítulo de las clases, recordarás que en general solo se utiliza un constructor. Esto es un problema para la creación de custom views.

El framework de Android espera tener disponibles varios constructores en función de dónde y cómo se esté creando la vista (por código, mediante un XML, si tiene un tema establecido…), así que no podemos obviar este caso.

Para ello, el equipo de Kotlin desarrolló la posibilidad de tener varios constructores en una misma clase, precisamente para casos como este.

La compatibilidad con Java es un requisito indispensable de Kotlin, así que siempre que te veas bloqueado, piensa que tiene que existir algún camino.

¿Te gustaría comenzar hoy a dar el siguiente paso? Te recomiendo que entres en mi training gratuito aquí.

Training Revienta tu productividad en Android con Kotlin

Creando una Custom View en Kotlin

Incluso aunque ya tengas experiencia creando Custom Views y algo de manejo en Kotlin, es posible que la primera vez que crees una en Kotlin te resulte un poco complicado.

Implementar varios constructores es una de las cosas más enrevesadas en Kotlin, precisamente porque casi no se usa.

Pero tranquilo, que una vez hayas visto una, el resto son muy parecidas.

Crea una clase que extienda de View

Para ello, crea una clase como vimos anteriormente. Haz que extienda de View por ejemplo, pero no le indiques ningún constructor:

class KotlinView : View {
}

Verás que este código te da error, porque nos está pidiendo que llamemos al constructor de la clase padre.

Si sabes que sólo vas a inflar la vista por código, por ejemplo, podrías utilizar la forma de constructor único que ya vimos:

class KotlinView(context: Context?) : View(context) {
}

Pero ten cuidado, porque como alguien decida añadir esta vista a un XML, fallará.

Spoiler: ¿Ves esa interrogación justo después del Context? En Kotlin, si queremos que una variable o parámetro pueda ser null, lo tenemos que especificar explícitamente con una interrogación. Luego el compilador nos obligará a comprobar que no es null antes de hacer nada con ello. Lo veremos más adelante.

Añade los múltiples constructores

Los constructores usan la palabra reservada constructor, y necesitan definir en su declaración a qué constructor llaman. Puede ser a otro constructor de esa misma clase (usando this) o al de la clase padre (usando super).

Así sería como se definirían los constructores de una vista Android:

class KotlinView : View {

    constructor(context: Context?) : this(context, null)
    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)

    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        ...
    }

}

Conclusión

Una vez visto, no es tan complicado generar tus vistas custom gracias a la existencia de múltiples constructores.

Esto te puede ser útil para cualquier clase en la que necesites más de uno. Pero en general, gracias a que se les pueden asignar valores por defecto a los parámetros (y evitar así las sobrecargas), no es habitual necesitar más de uno.

Si te gusta lo que has visto, te animo a que te apuntes al training gratuito, donde te contaré todo lo que necesitas para aprender a crear tus Apps Android en Kotlin desde cero.

Quizá también te interese…

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 ya está aquí, y como siempre trae una serie de novedades que te van a interesar muchísimo. Cabe destacar que a partir de ahora, de acuerdo las nuevas versiones de Kotlin se lanzarán cada 6 meses, independientemente de las nuevas funcionalidades que...

¿Qué es Kotlin y para qué sirve?

¿Qué es Kotlin y para qué sirve?

Kotlin es un lenguaje de programación de código abierto creado por JetBrains que se ha popularizado gracias a que se puede utilizar para programar aplicaciones Android. Pero si has llegado hasta aquí pensando que Kotlin solo se puede usar en Android, lo que te voy a...

2 formas de recolectar Flows en la UI que SÍ funcionan

2 formas de recolectar Flows en la UI que SÍ funcionan

En la serie de artículos sobre Programación Reactiva con Flow hemos visto muchos conceptos, y hemos aprendido cómo aplicarlos al desarrollo Android. Pero hay algo que no hemos hecho del todo bien. Esto es la recolección de Flows desde la Activity (o el Fragment, en...

2 Comentarios

  1. Luis Angel

    Hola!
    Pues realmente aprendí algo nuevo, cuando veia constructores kotlin inline no entendía nada pero ahora lo veo más claro.
    Muchas gracias!

    Quisiera decir que nunca me ha interesado mucho Kotlin porque siento que es sólo azúcar sintáctica de Android con Java, pero también siento que es necesario conocerlo por ser una tendencia generalizada en Android. Particularmente no me gusta que los multiples constructores sean tan heterogeneos a los otros, por ejemplo, aquí si se usa super, a diferencia del inline, y cosas como esas me causan confusión.

    Responder
    • Antonio Leiva

      Es raro usar múltiples constructores en Kotlin. Android es especial porque su framework hace un uso un poco raro de los constructores.

      Responder

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de Antonio Leiva Gordillo, con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *