Return to Video

05-39 Fix the Order Button - Solution

  • 0:00 - 0:03
    Существует несколько правильных
    решений.
  • 0:03 - 0:06
    Решение зависит от того, что лучше
    поможет вам выявлить разницу
  • 0:06 - 0:09
    между некорректной и корректной работой
    приложения.
  • 0:09 - 0:13
    Обратите внимание вот на что.
  • 0:13 - 0:16
    При некорректной работе приложения,
    когда вы нажимаете кнопку «Заказ»,
  • 0:16 - 0:17
    количество меняется на то же самое
    значение каждый раз,
  • 0:17 - 0:20
    и оно не должно меняться.
  • 0:20 - 0:22
    Кроме того, значение цены
    было корректным
  • 0:22 - 0:25
    для этого значения количества,
    но по факту цена должна соответствовать
  • 0:25 - 0:28
    последнему выбранному значению
    количества.
  • 0:28 - 0:32
    Это связано с тем фактом, что количество
    не должно меняться.
  • 0:32 - 0:34
    Чтобы понять, почему так происходит,
    давайте посмотрим существующий код.
  • 0:35 - 0:39
    В файле activity_main layout,
    кнопка «Заказа» объявлена здесь.
  • 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 - 1:01
    Также выводим на экран цену,
    как число чашек кофе по 5 долларов.
  • 1:01 - 1:04
    Этот код уже не имеет смысла,
    потому что мы сейчас пытаемся
  • 1:04 - 1:07
    оформить заказ и обновить количество.
  • 1:07 - 1:09
    Ещё одна загвоздка в том,
    что мы создаём переменную quantity,
  • 1:09 - 1:12
    уже имея глобальную переменную quantity,
    предназначенную для отслеживания
  • 1:12 - 1:14
    количества чашек кофе.
  • 1:14 - 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:36
    после объявления этой переменной,
    всякий раз, когда вы ссылаетесь
  • 1:36 - 1:39
    на переменную quantity,
  • 1:39 - 1:42
    ссылка будет на локальную переменную
    quantity со значением 5,
  • 1:42 - 1:44
    а не на глобальную со значением 2.
  • 1:44 - 1:46
    Итак, display(quantity)
  • 1:46 - 1:52
    и displayPrice(quantity *5) оба
    ссылаются на это значение переменной.
  • 1:52 - 1:54
    Это область видимости этой
    локальной переменной.
  • 1:54 - 1:55
    За пределами этой области,
  • 1:55 - 1:56
    всякий раз, когда вы ссылаетесь на
    переменную quantity,
  • 1:56 - 1:59
    имеется в виду вот эта
    глобальная переменная quantity.
  • 1:59 - 2:00
    Если подумать,
  • 2:00 - 2:03
    хотя это на самом деле не имеет смысла,
    когда вы размещаете заказ,
  • 2:03 - 2:07
    вы могли бы создать новую переменную
    quantity и затем вывести её на экран.
  • 2:07 - 2:10
    Вы хотите просто использовать ту
    переменную quantity, которая отслеживается
  • 2:10 - 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:48
    Я обновлю код так, чтобы в нём
    можно было это увидеть.
  • 2:48 - 2:51
    Обратите внимание, что переменная quantity
    поменяла цвет на фиолетовый.
  • 2:51 - 2:54
    Это означает, что мы используем глобальную
    переменную quantity в MainActivity.
  • 2:54 - 2:58
    Когда мы нажимаем кнопку, запускается
    метод submitOrder.
  • 2:58 - 3:00
    Он выводит цену на экран,
  • 3:00 - 3:02
    где её значение рассчитывается как:
    глобальная переменная quantity,
  • 3:02 - 3:05
    умноженная на 5.
  • 3:05 - 3:07
    Всё выглядит верно,
    теперь запустим это на нашем устройстве.
  • 3:08 - 3:10
    Теперь итоговая проверка.
  • 3:10 - 3:14
    Я меняю количество на 6,
    и затем нажимаю кнопку «Заказ».
  • 3:14 - 3:15
    Ура, 30 долларов!
  • 3:15 - 3:18
    Давайте попробуем другие значения,
    чтобы убедиться, что это не случайность.
  • 3:18 - 3:19
    Верно.
    Верно.
  • 3:19 - 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:37
    так что давайте поработаем
    над этим.
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