Russian subtitles

← 12-36 Casting with findViewById - Solution

Get Embed Code
13 Languages

Showing Revision 3 created 12/16/2015 by Fran Ontanaya.

  1. Давайте посмотрим на номер 1.
  2. Перед тем как я скажу ответ,
    я скопирую этот код
  3. и вставлю в Android Studio.
  4. Я хочу показать вам какая
    ошибка появится.
  5. Сейчас, при решении задачи вам
    не надо пользоваться Android Studio,
  6. вы сможете решить ее,
    просто посмотрев на код здесь
  7. и записав ответ.
  8. Мне все равно - будете вы
    использовать Android Studio, или нет.
  9. Чтобы код работал,
    я создала новый проект
  10. и изменила функционал
    в главном файле сборок так, чтобы
  11. появилось несколько раскладок для
    ID с которым мы будем работать.
  12. Я не уверена как это
    будет выглядеть,
  13. я просто хотела поместить их тут
    с нужными view ID.
  14. Так мой код будет здесь работать.
  15. Итак, для первой, я скопировала
    код сюда и вижу что есть ошибка.
  16. Android Studios говорит что
    не может определить метод setText.
  17. Если вы помните из прошлого видео,
  18. я говорила что setText
    это метод TextView.
  19. Это значит что вы можете вызвать этот
    метод только для объекта ТextView.
  20. В этом случае мы вызываем
    его для nameTextView.
  21. nameTextView определен
    как объект-представление,
  22. нам нужно изменить это
    на объект TextView.
  23. Теперь у нас ошибка -
    несовместимость типов.
  24. Для textview, нужен объект
    типа TextView, но
  25. вместо этого есть
    объект-представление.
  26. Это потому что findViewByID
    вызывает представление, а
  27. с правой стороны требуется TextView.
  28. Значит нам надо добавить это в набор
  29. представлений вызываемых
    findViewById в TextView.
  30. Теперь мы можем сохранит все целиком,
  31. где nameTextView,
    в переменную с левой стороны.
  32. Ошибка ушла, и мы можем назначить
    текст "Laura" в этом TextView.
  33. Ошибка в строке 1, а значит
    здесь я написала правильный код.
  34. Общее объяснение что нам надо назна-
    чить это представление в ТextView
  35. и сохранить его внутри
    переменной nameTextView.
  36. Таким образом при вызове
    nameTextView.setText,
  37. метода TextView,
    в следующей строке кода тут.
  38. Перейдем к номеру два.
  39. Я скопирую этот код в Android Studio.
  40. Вот код, который я скопировала.
  41. Первая строка кода верна -
    в ней нет ошибок.
  42. Но вторая строка
    подчеркнута красным и
  43. сказано, что есть ошибка
    несовместимости типов.
  44. Сказано, что необходима string,
    но вместо этого есть int.
  45. Чтобы лучше это понять,
  46. мы должны посмотреть на getMaxLines
    метод в документации по TextView.
  47. В документации по TextView я поищу
  48. метод getMaxLines.
  49. Вот он.
  50. Параметров для ввода нет и
  51. вызываемое значение
    этого метода - integer.
  52. Вот почему Android studio выдала
    ошибку, потому что этот метод
  53. выдает число, но
  54. мы пытались сохранить его
    в строковой переменной.
  55. В результате нам надо изменить
    этот тип данных переменной на int.
  56. Это исправит ошибку.
  57. Итак, этот метод возвращает число.
  58. И мы можем записать его внутри
    этой переменной maxLines.
  59. Но предупреждение осталось.
  60. В нем сказано, что переменная
    maxLines еще не использовалась.
  61. Но это лишь часть кода.
  62. Я представлю что в приложении мы бы
  63. использовали эту переменную позже.
  64. Итак, ошибка во второй строке
    и вот доделанный код.
  65. Решение в том что значение,
    возвращаемое этим методом
  66. должно быть целочисленным.
  67. Перейдем к номеру три.
  68. Вот код для номера три.
  69. Я скопировала его в Android Studio.
  70. Есть сообщение об ошибке
    несовместимости типов.
  71. Требовалось ImageView,
    но вместо него есть view.
  72. Это похоже на ошибку что мы
    только что видели с TextView.
  73. Этот метод работает
    с представлением.
  74. А с левой стороны мы пытаемся
    сохранить его внутри ImageView.
  75. Поэтому мы должны назначить этот
    объект-представление в ImageView.
  76. Это работает ведь на самом деле пред-
    ставление с ID icon это ImageView,
  77. поэтому его можно
    назначить в ImageView.
  78. Теперь правая сторона
    вычисляет ImageView,
  79. и мы можем сохранить это
    в переменной с правой стороны.
  80. Тип данных у этой переменной -
    ImageView, поэтому все совпадает
  81. и ошибки больше нет.
  82. С другой стороны мы можем
    вызвать метод ImageView,
  83. SetImageResource,
    для этого объекта IconImageView.
  84. Осталась одна ошибка - невозможность
    определить значение символа logo.
  85. Потому что я не добавила в приложение
    изображение с названием logo.
  86. Если я это добавлю, ошибка уйдет
    и наш код здесь будет верным.
  87. Вот верный код, где я
    поместила это в ImageView.
  88. И последний - номер 4.
  89. Я скопировала код сюда в Android
    Studio и на удивление ошибок нет.
  90. Код пытается найти
    представление с id title,
  91. и полученное представление надо
    сохранить в этой переменной TextView.
  92. У TextView тип данных View, и это
  93. совпадает с правой стороной,
    поэтому весь код верен.
  94. В следующей строке
    мы берем объект - View и
  95. запускаем его в методе
    setVisibility.
  96. Метод берет один исходный
    параметр - View.GONE.
  97. Я могу проверить документацию
    чтобы проверить почему так.
  98. В документации для класса
    представлений, я ищу
  99. метод setVisibility.
  100. Я вижу что setVisibility это метод
    для класса представлений.
  101. Он берет эти исходные, число которое
    представляет состояние видимости.
  102. Возможные значение видимости это
    VISIBLE, INVISIBLE, и GONE.
  103. Поскольку setVisibility это метод
    для класса представлений,
  104. то эта операция работает.
  105. Нет необходимости назначать
    это в TextView
  106. поскольку вызываемый метод -
    для класса представлений.
  107. Теперь, если мы попытаемся
    использовать метод TextView,
  108. то надо будет
    назначить его в TextView.
  109. Поэтому тут не будет
    ошибок, поскольку
  110. setVisibility метод представлений,
    можно оставлять его как такой объект.
  111. Это были трудные вопросы.
  112. Не страшно, если вы ошиблись.
  113. В следующем тесте вы сможете
    больше потренироваться на этом.