Skip to content
This repository has been archived by the owner on Jul 17, 2023. It is now read-only.

Latest commit

 

History

History
198 lines (108 loc) · 6.61 KB

implementation.md

File metadata and controls

198 lines (108 loc) · 6.61 KB

Decisiones de implementación


README | Documentación | Recursos de BEDU y Referencias


Tabla de contenidos

Flujo

Main navigation

main_navigation

Menu navigation

menu_navigation


activiy_main

fragment_register

activity_menu fragment_product_contact fragment_product_detail

Dificultades y soluciones

Rating y votos random

  • Contexto:

    Cada producto utilizado en nuestro RecyclerView tiene dos valores que se instancian de forma aleatoria (rating y cantidad de votos)

  • Dificultad:

    Al asignar los valores dentro del HomeFragment, estos mismos se volvían a instanciar de forma aleatoria cada vez que cargábamos el Fragment (esto sucedía cada vez que se seleccionaba la opción “Inicio” en nuestro BottomNavigationView)

  • Solución:

    Colocamos la creación de la lista de productos dentro de nuestro MenuActivity, así como también la creación de sus valores aleatorios (específicamente en la función sobrescrita onCreate, que se ejecuta una sola vez), esta información ya creada se almacena dentro del companion object para que pueda ser recolectada luego en el HomeFragment cuando sea necesario.


  • Contexto:

    Al seleccionar un producto que se encuentre en el listado (RecyclerView), se debe enviar la información de este mismo a otro Fragment llamado ProductDetailFragment, para que el cliente lo pueda visualizar completamente junto con su descripción.

  • Dificultad:

    El hecho de realizar esta operación dentro de un Fragment hacia otro Fragment a través de la función findNavController().navigate() nos lleva a querer investigar una forma segura de realizar este proceso para enviar únicamente nuestro producto por cada clickListener ejecutado.

  • Solución:

    Logramos incluir el uso de SafeArgs para manejar la navegación considerada safe debido al hecho de indicar en el Fragment receptor (En nuestro caso: ProductDetailFragment) el tipo de dato Parcelable que queremos recibir (En nuestro caso: Product).


 

  • Contexto:

    Queremos mostrar en cada producto del listado (RecyclerView) las imágenes que se encuentran al visitar las URLs recibidas en nuestro “products.json”.

  • Dificultad:

    El hecho de insertar la imagen directamente, como se realizaba hasta el momento, en cada vista del RecyclerView no funcionaba, ya que se trataban de Strings y no direcciones id de imágenes que podríamos recolectar de nuestra carpeta “Res”.

  • Solución:

    Implementamos la dependencia llamada “Picasso” (com.squareup.picasso:picasso:2.71828), la cual nos aporta de diversos métodos creados para la abstracción de esta dificultad.

    Ejemplo:

    Picasso.get().load(product.image).into(productImage)

    Siendo:

    • product.image -> La URL que recibimos.

    • productImage -> La ImageView identificada en nuestro Layout donde pondremos la imagen.


Menú de navegación

 

  • Contexto:

    Necesitamos crear la funcionalidad para nuestro BottomNavigationView, en la cual deberíamos observar que, dependiendo del item seleccionado, se despliegue el Fragment correspondiente.

  • Dificultad:

    Al indicarle dentro de nuestro FragmentContainerView el tipo de “navGraph” que debería utilizar, no tenemos la certeza de cual Fragment está utilizando en cada momento ni la forma en la que podremos indicarle cual debería mostrar en el momento necesario.

  • Solución:

    Logramos implementar el uso de una función que nos permite asignar el navController del navHostFragment perteneciente a la MenuActivity, en el BottomNavigationView. Lo cual realiza completamente la identificación de cual Fragment se debería mostrar según el item seleccionado, con la única precaución de tener en cada uno de estos ítems el id exactamente igual que el nombre del Fragment que queremos mostrar para cada caso.

 

Uso de tests unitarios

 

Tests unitarios que corren en la JVM, sin dependencia del framework de Android

  • Localizamos dentro de nuestro proyecto el archivo donde se encuentran los test
  • Abrimos nuestro LoginCheckTest
  • Seleccionamos el botón que se encuentra del lado izquierdo de la declaración de nuestra clase
  • Elegimos la opción Run LoginCheckTest
  • Finalmente vemos el resultado en nuestra pestaña Run (Ubicada en la parte inferior del proyecto)

 

Tests que involucran el uso del framework de android en un test unitario local (no instrumentado)

  • Localizamos dentro de nuestro proyecto el archivo donde se encuentran los test de android
  • Abrimos nuestro ResourceComparerTest
  • Seleccionamos el botón que se encuentra del lado izquierdo de la declaración de nuestra clase
  • Elegimos la opción Run ResourceComparerTest
  • Finalmente vemos el resultado en nuestra pestaña Run (Ubicada en la parte inferior del proyecto)

README | Documentación | Recursos de BEDU y Referencias