>

Kotlin: Nuestra primera app #KotlinMeetsAndroid

Francisco Manuel López Jurado     Colaboraciones    13/10/2017


En este post vamos a dejar de lado un poco más la teoría y nos vamos a enfocar en el desarrollo de una aplicación totalmente funcional en Android. En principio, no nos vamos a centrar de momento en la arquitectura, sino en realizar todas las funcionalidades. En siguientes post iremos migrando toda esa lógica hacia un patrón MVP y la aplicación de Clean Architecture, pero ante es interesante la familiarización con el lenguaje desde un punto de vista mucho más práctico. Sin más, ¡manos a la obra!

Creación proyecto

Si no tienes la versión de Android Studio 3.0, puedes seguir los pasos del siguiente post. Después de seguirlos, ya tendremos nuestro proyecto creado (hemos seleccionado la opción “Empty Activity”).

La estructura que se creará es como la que se puede ver en la siguiente captura, el código de nuestra Activity principal ya estará en Kotlin, por lo que ya podemos empezar a desarrollar nuestra app en dicho lenguaje.

Bind de vistas, ¿adiós a Butterknife?

Vamos a comparar el bindeo de una vista simple sin usar ButterKnife, usándolo y en Kotlin sin ninguna librería. Para ello tenemos la siguiente porción de código XML en nuestro layout que incluye un TextView en nuestra Activity.

  • Java sin ButterKnife.

Tenemos que hacer uso siempre del método findViewById(int resId) y posteriormente haremos uso del método setText.

  • Java con ButterKnife.

Usamos la anotación BindView para hacer referencia a la vista, posteriormente usamos el mismo método que en el apartado anterior.

  • Kotlin a secas

Pero… ¿dónde está la declaración de la variable?

En ningún lugar, al menos que veamos a primera vista, ya que es totalmente transparente para nosotros. Y… ¿cómo lo hace?

La respuesta son las extensiones que proporciona Kotlin a Android, ya que gracias a ellas podemos recuperar vistas de Activities, Fragments y CustomViews de manera fácil, sencilla y sin código adicional. Para acceder a las vistas simplemente tenemos que usarlas mediante el id que se le dió al crearla en el layout (en este caso @+id/mainTitle).

Además, Kotlin crea una caché local, por lo que la primera vez hará uso internamente del método findViewById pero en consultas posteriores ya no será necesario y lo hará con mayor velocidad y más de forma más eficiente.

Para usar las vistas de este layout se generará automáticamente un import, más fácil, imposible:

Hay que tener una consideración con los fragments ya que la vista puede ser recreada mientras la instancia sigue viva. En dicho caso, las vistas de la caché ya no serán válidas. Sin embargo, Kotlin internamente llama al método clearFindViewByIdCache en el método onDestroyView, por lo que no tendremos problemas de memoria ni rendimiento. Una vez más, todo son facilidades.

Listeners a nuestros elementos de vista

Como ya hemos hecho mención en anteriores post, adiós al código repetitivo:

En el layout tenemos un elemento Button con id “mainGoToList”, por lo que es automáticamente generado y podemos establecer la implementación de su click.

RecyclerView, ViewHolder y Adapter. La cosa se complica… o no!

Empezamos creando el modelo “Coche” que tendrá un id y un nombre, ambos de tipo String.

Ahora creamos el layout para la representación de cada elemento.

Una vez tenemos el modelo y el layout, vamos a crear el Adapter junto con el ViewHolder que usaremos para la representación de nuestros elementos de tipo “Coche”.

En primer lugar tenemos el constructor que recibe un listado de elementos de tipo “Coche” y un listener para usarlo cuando se haga click en un elemento del mismo. Después implementaremos los métodos necesarios:

  • onCreateViewHolder. Tenemos que inflar el ViewHolder que usaremos para la representación de los datos.
  • onBindViewHolder. Estableceremos los textos necesarios en función del elemento y el click en la vista.
  • getItemCount. Retorna el total de items a mostrar.

En el elemento CarViewHolder hacemos referencias de las vistas que luego necesitaremos para establecer los valores de cada elemento.

Por último, en nuestra Activity, estableceremos el LayoutManager, nuestro adapter y la implementación del click de cada elemento a nuestro RecyclerView.

Nota: Para generar el listado de elementos hemos hecho uso de la función mapTo que se encarga de aplicar la función de transformación proporcionada a cada elemento de la secuencia y de agregar los resultados al destino especificado posteriormente.

En resumen, estamos poniendo en práctica todos los conocimientos que hemos ido adquiriendo en artículos anteriores con el fin de generar nuestra aplicación de forma sencilla , con el menor código posible y usando Kotlin.


Sobre el autor

Francisco Manuel López Jurado   

Apasionado de la tecnología y todo lo que la rodea. Desarrollador Senior Android e iOS.