Spanish subtitles

← 12-35 Casting con findViewById

12-35 Casting con findViewById

Get Embed Code
13 Languages

Showing Revision 20 created 10/09/2015 by andp.

  1. Añadí el código que vimos
    en nuestra aplicación.
  2. Dice,
    View orderSummaryTextView = findViewById,
  3. luego pasamos el identificador de recurso
    para el order_summary_text_view.
  4. Pero esto provoca un error
    en Android Studio en la siguiente línea.
  5. Dice que no puede resolver
    el método setText.
  6. Si añado otra línea de código aquí,
  7. puedo mostrarte los tipos de métodos
    que son válidos en esta variable.
  8. Así, recién creamos la variable
    orderSummaryTextView aquí
  9. y es un TypeView,
  10. entonces en la línea siguiente,
    podemos denominarla métodos.
  11. Pero si nos fijamos en
    las sugerencias de autocompletado,
  12. estos métodos son métodos View.
  13. No hay métodos específicos TextView.
  14. Por ejemplo, no hay ningún método setText.
  15. Es por eso que tenemos un error aquí,
    cuando tratamos de llamar setText.
  16. Tampoco puedes hacer setTextSize,
    o setTextColor o ninguno de los dos.
  17. ¿Dónde están todos esos métodos?
  18. Bueno, la cosa es que un TextView
    es un tipo más específico de View.
  19. Así que si queremos llamar
    a métodos TextView
  20. a este objeto, necesitamos asegurarnos
    que este sea un objeto TextView.
  21. Bien, la variable es un objeto TextView.
  22. Pero entonces aparece otro error
    que dice tipos incompatibles,
  23. porque se requiere un TextView
    en el lado derecho,
  24. pero solo encontramos
    una vista normal.
  25. Esto es así porque el método findViewById
    retorna un View.
  26. ¿Cómo podemos reconciliar esto?
  27. Bueno, como TextView es un tipo View
    más específico o dicho de otra manera,
  28. un TextView es una subclase
    de View, podemos usar
  29. algo llamado casting
    (conversión de tipos de datos).
  30. Casting en Java significa que podemos
    tomar el View devuelto por este método
  31. y tratarlo como un TextView.
  32. Así que ahora, esto a la derecha
    es en realidad un objeto TextView
  33. y luego podemos almacenarlo
    en esta variable orderSummaryTextView.
  34. Sé que debe sonar abrumador,
    porque acabo de mencionar
  35. muchos nuevos conceptos.
  36. Lo explicaré de nuevo.
  37. El método findViewById
    retorna un objeto de tipo View.
  38. Al escribir esta notación,
  39. el tipo de dato deseado del objeto
    entre paréntesis,
  40. estamos convirtiendo
    este View en un TextView.
  41. Así que toda esta expresión
    evalúa un objeto TextView.
  42. Luego, podemos almacenarlo en la variable,
    en el lado izquierdo,
  43. que es orderSummaryTextView,
    y tiene un tipo TextView.
  44. Ahora, en las líneas siguientes,
  45. podemos llamar a métodos TextView
    sobre este objeto.
  46. ¿Ves ahora cómo todos los métodos
    de texto aparecen aquí?
  47. setAllCaps, setTextSize y más.
  48. Puedo borrar esto ahora,
    porque setText debería funcionar,
  49. Y no hay más errores.
  50. Entonces si queremos llamar
    a métodos TextView,
  51. necesitamos tener un objeto TextView.
  52. Para tener un objeto TextView,
    tenemos que llamar a findViewById,
  53. y luego convertir este objeto View
    en un TextView.
  54. La conversión funciona porque
  55. esta vista de la jerarquía de vistas
    es en realidad un TextView.
  56. Si tratáramos de convertir algo
    como un botón de radio, no funcionaría,
  57. porque orderSummaryTextView
    es, en realidad, un TextView,
  58. así que tenemos que convertirlo
    en el tipo apropiado.
  59. Del mismo modo, en el método
    displayQuantity, llamamos a findViewById
  60. y le pasamos este identificador de recurso
    para el TextView quantity.
  61. Esto devuelve un View,
    y lo convertimos en un TextView
  62. y podemos almacenarlo dentro de esta
    variable llamada quantityTextView.
  63. Esta variable tiene tipo TextView
    y entonces,
  64. en líneas siguientes, podemos llamar
  65. a métodos TextView sobre
    ella, como setText.
  66. Aquí está el código actualizado
  67. de MainActivity,
    usando conversión de tipos.
  68. Podemos convertir estos Views en TextViews
    para poder almacenarlos en variables
  69. que tienen tipo TextView.
  70. Entonces, en esta lista
    de variables de MainActivity,
  71. ahora quantityTextView y
    orderSummaryTextView son de tipo TextView.
  72. Podemos llamar a
    métodos TextView sobre estas
  73. y no estamos limitados
    a tratarlas solo como Views.
  74. Y ahora podemos llamar
    a métodos específicos TextView
  75. sobre estas variables.
  76. Por ejemplo, podemos llamar a setText
    sobre orderSummaryTextView
  77. y podemos llamar a setText
    sobre quantityTextView.
  78. Como puedes ver, tienes que tener cuidado
    sobre qué tipos de datos se usan y dónde.
  79. Hasta ahora, cuando llamamos a métodos,
  80. no nos preocupamos por
    el valor de retorno,
  81. porque el método setText,
    en realidad, no tiene valor de retorno.
  82. Lo mismo con el método
    imageView.setImageResource.
  83. No tiene ningún valor de retorno.
  84. Pero otros métodos pueden
    tener valores de retorno.
  85. Por ejemplo, en la clase TextView
    tenemos un método getTextSize.
  86. Este retorna un entero,
  87. así que podemos almacenar
    el resultado de este método
  88. en una variable llamada size de tipo int.
  89. Aquí hay otro método
    que tiene un valor de retorno.
  90. En la clase Button puedes
    llamar al método getHeight,
  91. Y este devuelve un valor entero,
  92. por lo que puedes guardarlo
    en una variable.
  93. Si trataras de almacenar este resultado
    dentro de un string, por ejemplo,
  94. obtendrías un error,
    porque este método devuelve un entero.
  95. Para saber qué tipo de datos
    debe ser pasado a un método
  96. y qué tipo de datos retorna un método,
    debes mirar la documentación.
  97. Por ejemplo, en la clase TextView,
  98. si llamas a cualquiera de estos métodos,
    devuelve un valor de tipo int.
  99. El tipo de datos del valor de retorno
    está en la columna de la izquierda aquí.
  100. Para otros métodos, podrías obtener
    void como valor de retorno, o booleanos,
  101. los que todavía no hemos aprendido,
    o floats o longs, etc.
  102. Esta página de documentación
    también muestra
  103. cuáles son los tipos de datos esperados
  104. para las entradas de cada método.
  105. Por ejemplo, el método setTextColor
    requiere un número entero como entrada
  106. y el valor de retorno es void,
    así que no hay valor de retorno.
  107. Entonces mira la documentación para saber
    qué tipos de datos se esperan.
  108. De lo contrario, obtendrás errores
    en Android Studio
  109. diciendo que los tipos de datos
    no coinciden.
  110. Ahora es tu turno para practicar.
  111. Abajo hay cuatro
    ejemplos de código diferentes.
  112. Algunos códigos pueden contener errores
  113. relativos a tipos de datos
    que no coinciden.
  114. Si encuentras un error,
  115. describe cómo se supone que lo arreglarías
  116. escribiéndolo en las
    casillas correspondientes.
  117. De lo contrario,
    puedes escribir "no hay error"
  118. si el código está perfectamente bien.
  119. Esta va a ser una prueba exigente
    porque acabamos de cubrir
  120. muchos conceptos y este código
    todavía es bastante nuevo para ti.
  121. Tómate tu tiempo y mira
    la documentación de estos métodos.
  122. Asegúrate que las entradas
    y los valores de retorno sean correctos
  123. y que si estamos declarando las variables,
  124. que estén los tipos de datos
    correctos aquí.
  125. También, mira la documentación
  126. para estas llamadas a métodos
    para asegurar
  127. que usamos
    correctamente los métodos.