Return to Video

05-39 Fix the Order Button - Solution

  • 0:00 - 0:03
    Существует несколько правильных
    решений.
  • 0:03 - 0:06
    Вы выбираете именно то решение,
    которое поможет вам увидеть разницу
  • 0:06 - 0:10
    между некорректной и корректной работой
    приложения.
  • 0:10 - 0:13
    Обратите внимание вот на что.
  • 0:13 - 0:16
    При некорректной работе приложения,
    когда вы нажимаете кнопку «Заказ»,
  • 0:16 - 0:19
    количество меняется на то же самое
    значение каждый раз,
  • 0:19 - 0:20
    но оно не должно меняться.
  • 0:20 - 0:22
    Кроме того, значение цены
    было корректным
  • 0:22 - 0:25
    для этого значения количества,
    но по факту цена должна соответствовать
  • 0:25 - 0:28
    последнему выбранному значению
    количества.
  • 0:28 - 0:32
    Это связано с тем фактом, что количество
    не должно меняться.
  • 0:32 - 0:35
    Чтобы понять, почему так происходит,
    давайте посмотрим существующий код.
  • 0:35 - 0:39
    В файле макета activity_main
    кнопка «Заказа» объявлена здесь.
  • 0:39 - 0:41
    Когда она нажимается,
  • 0:41 - 0:43
    в MainActivity вызывается метод
    submitOrder.
  • 0:43 - 0:48
    В файле MainActivity.java
    метод submitOrder расположен здесь.
  • 0:48 - 0:51
    Это старый код,
    который мы ещё не меняли.
  • 0:51 - 0:55
    Мы создаём целочисленную переменную
    quantity и инициализируем её значением 5.
  • 0:55 - 0:56
    Отображаем её на экране.
  • 0:56 - 0:59
    Также выводим на экран стоимость,
    которая равна числу чашек кофе,
  • 0:59 - 1:01
    умноженному на 5 долларов.
  • 1:01 - 1:04
    Этот код уже не имеет смысла,
    потому что мы сейчас пытаемся
  • 1:04 - 1:07
    оформить заказ и обновить количество.
  • 1:07 - 1:09
    Ещё одна загвоздка в том,
    что мы создаём переменную quantity,
  • 1:09 - 1:13
    уже имея глобальную переменную quantity,
    предназначенную для отслеживания
  • 1:13 - 1:15
    количества чашек кофе.
  • 1:15 - 1:18
    В MainActivity у нас уже есть глобальная
    переменная quantity,
  • 1:18 - 1:23
    поэтому любой метод внутри класса
    может ссылаться на эту переменную.
  • 1:23 - 1:27
    Однако, в методе submitOrder мы создаём
    новую локальную переменную quantity.
  • 1:27 - 1:30
    Теоретически локальная переменная может
    иметь то же имя,
  • 1:30 - 1:32
    что и глобальная.
  • 1:32 - 1:35
    Это просто означает, что в контексте
    этого метода,
  • 1:35 - 1:38
    после объявления этой переменной,
    всякий раз, когда вы ссылаетесь
  • 1:38 - 1:39
    на переменную quantity,
  • 1:39 - 1:42
    ссылка будет на локальную переменную
    quantity со значением 5,
  • 1:42 - 1:45
    а не на глобальную со значением 2.
  • 1:45 - 1:47
    Итак, display(quantity)
  • 1:47 - 1:52
    и displayPrice(quantity *5)
    ссылаются на это значение переменной.
  • 1:52 - 1:54
    Это область видимости этой
    локальной переменной.
  • 1:54 - 1:55
    За пределами этой области,
  • 1:55 - 1:58
    всякий раз, когда вы ссылаетесь на
    переменную quantity,
  • 1:58 - 2:01
    имеется в виду вот эта
    глобальная переменная quantity.
  • 2:01 - 2:02
    Однако, если подумать,
  • 2:02 - 2:05
    это на самом деле не имеет смысла,
    когда вы размещаете заказ,
  • 2:05 - 2:08
    вы могли бы создать новую переменную
    quantity и затем вывести её на экран.
  • 2:08 - 2:12
    Вы хотите просто использовать ту
    переменную quantity, которая отслеживается
  • 2:12 - 2:15
    при увеличении или уменьшении
    числа чашек кофе.
  • 2:15 - 2:18
    Вот откуда мы должны рассчитывать
    нашу цену.
  • 2:18 - 2:22
    Чтобы исправить код, нам не нужно
    объявлять локальную переменную quantity.
  • 2:22 - 2:25
    Вместо этого нам нужно использовать
    глобальную переменную quantity.
  • 2:25 - 2:29
    Нужно также оставить попытки
    обновления переменной на экране.
  • 2:29 - 2:31
    Кнопки «Плюс» и «Минус» уже
    вывели на экран
  • 2:31 - 2:34
    правильное значение количества.
  • 2:34 - 2:38
    Однако, мы хотим, чтобы кнопка
    submitOrder всё ещё обновляла цену.
  • 2:38 - 2:42
    Но сейчас мы хотим рассчитать цену
    как количество, помноженное на 5,
  • 2:42 - 2:44
    используя при этом глобальную
    переменную quantity.
  • 2:44 - 2:47
    Я обновлю код так, чтобы в нём
    можно было это увидеть.
  • 2:47 - 2:51
    Обратите внимание, что переменная quantity
    поменяла цвет на фиолетовый.
  • 2:51 - 2:55
    Это означает, что мы используем глобальную
    переменную quantity в MainActivity.
  • 2:55 - 2:58
    Когда мы нажимаем кнопку, запускается
    метод submitOrder.
  • 2:58 - 3:00
    Он выводит цену на экран,
  • 3:00 - 3:03
    где её значение рассчитывается как:
    глобальная переменная quantity,
  • 3:03 - 3:05
    умноженная на 5.
  • 3:05 - 3:08
    Всё выглядит верно,
    теперь запустим это на нашем устройстве.
  • 3:08 - 3:10
    Теперь итоговая проверка.
  • 3:10 - 3:13
    Я меняю количество на 6,
    и затем нажимаю кнопку «Заказ».
  • 3:13 - 3:15
    Ура, 30 долларов!
  • 3:15 - 3:18
    Давайте попробуем другие значения,
    чтобы убедиться, что это не случайность.
  • 3:18 - 3:20
    Верно.
    Верно.
  • 3:21 - 3:23
    Работает!
  • 3:23 - 3:24
    Вы только что исправили
    свою первую ошибку.
  • 3:24 - 3:26
    Вы отлично справились с задачей.
  • 3:26 - 3:29
    Наше приложение отлично
    функционирует.
  • 3:29 - 3:32
    Но следует признать,
    что интерфейс немного неприглядный.
  • 3:32 - 3:36
    Особенно это актуально
    для элемента выбора количества,
  • 3:36 - 3:38
    так что давайте поработаем
    над этим.
Title:
05-39 Fix the Order Button - Solution
Description:

05-39 Как исправить кнопку «Заказ» -- Решение

more » « less
Video Language:
English
Team:
Udacity
Project:
UD837 - Android for Beginners
Duration:
03:39

Russian subtitles

Revisions Compare revisions