Portuguese, Brazilian subtitles

← Casting with findViewById

Get Embed Code
13 Languages

Showing Revision 4 created 09/29/2015 by Leonardo Maia.

  1. Adicionei o código que vimos no nosso app.
  2. Aqui diz View orderSummaryTextView
    = findViewById
    ,
  3. então passamos para a ID de recurso para
    order_summary_text_view
  4. Mas isso causa um erro na próxima
    linha no Android Studio.
  5. Diz "cannot resolve the method setText".
  6. Se eu adicionar uma nova
    linha de código aqui,
  7. Posso mostrar os tipos de métodos
    válidos nessa variável.
  8. Então, criamos a variável
    orderSummaryTextView aqui,
  9. que é uma TypeView, então
  10. na próxima linha, somos capazes
    de chamar os métodos nela.
  11. Mas se você vir as sugestões
    do autocompletar,
  12. esses métodos, na verdade,
    são métodos View.
  13. Não há métodos específicos de TextView.
  14. Por exemplo, não há método setText.
  15. Por isso temos um erro aqui embaixo
    quando tentamos chamar setText.
  16. Você também não pode definir o tamanho
    ou a cor do texto, ou nada disso.
  17. Então, onde estão todos esses métodos?
  18. O TextView é um tipo mais
    específico de View.
  19. Então se quisermos chamar
    métodos TextView
  20. neste objeto, precisamos ter certeza
    que este é um objeto TextView.
  21. Essa variável é um objeto TextView.
  22. Mas aparece outro erro que diz
    incompatible types, porque o TextView
  23. é requerido no lado direito,
    mas encontramos apenas um view simples.
  24. Isso porque o método findViewByld
    volta para view.
  25. Como resolvemos isso?
  26. Já que TextView é um tipo mais específico
    de View, ou melhor,
  27. o TextView é uma subclasse do View,
    podemos usar a conversão de tipos.
  28. Conversão em Java significa que podemos
    pegar o View de retorno para esse método
  29. e tratá-lo como se fosse um TextView.
  30. Então este lado direito é um
    objeto TextView,
  31. e podemos armazená-lo dentro dessa
    variável orderSummaryTextView.
  32. Sei que deve ser muita informação,
    porque já mencionei
  33. uma tonelada de novos conceitos.
  34. Deixe-me explicar de novo.
  35. O método findViewById torna-se
    um objeto do tipo View.
  36. Ao escrever essa notação,
  37. parênteses com os dados do objeto
    desejado no meio deles.
  38. Estamos convertendo esse View
    em um TextView.
  39. Então toda a expressão aqui vai ser
    calculado como um objeto TextView.
  40. Então, podemos armazenar na nossa
    variável no lado esquerdo,
  41. onde está orderSummary TextView,
    e tem um tipo de TextView.
  42. Nas linhas subsequentes, podemos chamar
    os métodos TextView neste objeto.
  43. Estão vendo que agora todos os métodos
    de texto estão aqui?
  44. setAllCaps, setTextSize, e outros.
  45. Então posso apagar isso agora,
    porque setText deve funcionar,
  46. e não há mais erros.
  47. Então, se quisermos chamar
    os métodos TextView,
  48. precisamos ter um objeto TextView.
  49. Para termos um objeto TextView,
    precisamos chamar findViewById,
  50. e então converter esse objeto View
    em um TextView.
  51. A razão pela qual a conversão
    funciona é porque
  52. esse View aqui, na hierarquia do view
    é um TextView, na verdade.
  53. Se queremos converter em algo como
    um botão de rádio, não vai funcionar,
  54. porque o orderSummaryTextView,
    na verdade, é um TextView,
  55. então temos que convertê-lo
    no tipo apropriado.
  56. Da mesma forma, no método displayQuantity,
    estamos chamando findViewById,
  57. e estamos passando nesse recurso de ID
    para a quantidade TextView.
  58. Este retorna como View, e o convertemos
    em um TextView, e então,
  59. podemos armazená-lo dentro desta variável
    chamada quantityTextView.
  60. Essa variável é do tipo TextView, então,
  61. nas linhas subsequentes, podemos chamar
    métodos TextView nela, como o setText.
  62. Aqui está o código da MainActivity
    usando a conversão.
  63. Convertemos esses Views em TextViews,
    para que sejam armazenados nas variáveis
  64. que tenham o tipo TextView, então nesta
    lista das variáveis da MainActivity,
  65. quantityTextView e orderSummaryTextView
    são do tipo TextView.
  66. Podemos chamar os métodos TextView,
  67. e não estamos limitados a tratá-los
    como Views.
  68. E agora, chamamos os métodos específicos
    de TextView nessas variáveis.
  69. Por exemplo, podemos chamar setText
    no orderSummaryTextView,
  70. e podemos chamar setText no
    quantityTextView.
  71. Como pode ver,
  72. você tem que ter cuidado sobre os tipos
    de dados e onde são usados.
  73. Quando chamamos métodos,
    não nos preocupamos com o valor de retorno,
  74. porque o método setText não tem
    valor de retorno.
  75. Mesma coisa com o método
    imageView.setImageResource method,
  76. que não tem valor de retorno.
  77. Mas outros métodos podem ter.
  78. Por exemplo, na classe TextView temos
    o método getTextSize.
  79. Isso retorna em uma integral, então
  80. podemos armazenar o resultado deste método
    em uma variável chamada size do tipo int.
  81. Um outro método que não tem
    valor de retorno.
  82. Na classe Button você pode chamar
    o método getHeight,
  83. e isso retorna um valor integral,
    então pode-se armazenar na variável.
  84. Se você armazenar esse resultado
    dentro de uma cadeia, por exemplo,
  85. vai aparecer um erro, porque esse método
    retorna em uma integral.
  86. Para saber que tipo de dados precisam
    passar em um método e que tipo
  87. de dados se obtém a partir de um método,
    cheque a documentação.
  88. Por exemplo, na classe TextView,
  89. Se você chamar esses métodos,
    eles retornam um valor do tipo int.
  90. O valor de retorno do tipo de dados estão
    na coluna esquerda.
  91. Para outros métodos, voce pode ter um
    valor de retorno inválido, ou booleanos,
  92. que ainda não aprendemos,
    ou floats, ou longs, e etc.
  93. Essa página também mostra o que é
    esperado de cada tipo de dados
  94. para dar entrada em cada método.
  95. Por exemplo, o método setTextColor requer
    uma integral como input
  96. e o valor de retorno é inválido,
    então não há valor de retorno.
  97. Cheque o documento para saber que tipos
    de dados são exigidos.
  98. Do contrário, você terá erros no Android
    Studios que dizem
  99. que os tipos de dados não combinam.
  100. Agora é sua vez de praticar.
  101. Abaixo há quatro exemplos
    de códigos diferentes.
  102. Algum deles podem conter erros sobre
    os tipos de dados não combinarem.
  103. Se você encontrar o erro,
  104. descreva nas caixas como você consertaria.
  105. Do contrário, você escreve apenas
    No error se o código estiver em ordem.
  106. Esse quiz vai ser desafiador porque
    tratamos de diversos conceitos,
  107. e esse código é muito novo para você.
  108. Não tenha pressa e cheque os métodos
    na documentação.
  109. Tenha certeza que os inputs e os valores
    de retorno estejam corretos,
  110. e se declararmos variáveis, que elas
    estejam com os tipos de dados corretos.
  111. Também, dê uma olhada na
    documentação
  112. sobre esses métodos para ter certeza
    que os estamos usando corretamente.