Return to Video

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
    在错误的应用行为中,当您点击ORDER按钮,
  • 0:16 - 0:20
    每次quantity会变为同样的值,这不应该。
  • 0:20 - 0:22
    接下来我还注意到,对于这个quantity的值
  • 0:22 - 0:25
    价格是正确的,但其实价格应该对应
  • 0:25 - 0:28
    quantity picker中选中的
    最新的quantity值。
  • 0:28 - 0:32
    这还是说明,quantity不应该发生变化。
  • 0:32 - 0:34
    我们看看现有的代码,找到发生原因。
  • 0:35 - 0:39
    在activity_main布局文件中,
    我们在这里声明了ORDER按钮。
  • 0:39 - 0:41
    点击ORDER按钮后,
  • 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
    我们还会更新quantity。
  • 1:07 - 1:09
    另外还有一个问题,我们创建了一个
    整型quantity变量,
  • 1:09 - 1:12
    而我们已经有了一个全局quantity,
    它原本是用来记录
  • 1:12 - 1:14
    咖啡的杯数。
  • 1:14 - 1:18
    在MainActivity中我们已经
    有个一个全局quantity变量,
  • 1:18 - 1:23
    因此它内部的任何方法都可以
    引用quantity变量。
  • 1:23 - 1:27
    但在submitOrder方法中我们
    创建了一个新的本地quantity变量。
  • 1:27 - 1:30
    从技术讲,本地变量可以
  • 1:30 - 1:32
    与全局变量同名。
  • 1:32 - 1:35
    这意味着在此方法的上下文中,
  • 1:35 - 1:39
    当声明变量之后,
    无论何时引用quantity,
  • 1:39 - 1:42
    它实际引用的是值为5的本地变量,
  • 1:42 - 1:44
    而不是值为2的全局变量。
  • 1:44 - 1:46
    因此display(quantity)和
  • 1:46 - 1:52
    displayPrice(quantity *5)都是
    引用这一quantity值。
  • 1:52 - 1:54
    这是本地变量的作用范围。
  • 1:54 - 1:55
    在此范围以外,
  • 1:55 - 1:59
    无论何时引用quantity,
    它指的都是这一全局quantity。
  • 1:59 - 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
    而且不要在新屏幕上更新这个quantity。
  • 2:29 - 2:31
    加号和减号按钮已经可以用正确的quantity值
  • 2:31 - 2:34
    更新屏幕。
  • 2:34 - 2:38
    但我们还想要submitOrder
    按钮来更新价格。
  • 2:38 - 2:42
    但这次我们将会
    使用全局quantity变量,
  • 2:42 - 2:44
    以quantity * 5计算价格。
  • 2:44 - 2:48
    我将会更新代码,
    将刚才所述内容添加进去。
  • 2:48 - 2:51
    请注意,quantity变量变成了紫色字体,
  • 2:51 - 2:54
    这表示我们使用的是
    MainActivity中的全局变量。
  • 2:54 - 2:58
    当按下按钮,
    将会触发submitOrder方法。
  • 2:58 - 3:00
    这会将价格显示在屏幕上,
  • 3:00 - 3:04
    价格为全局quantity变量乘以5。
  • 3:05 - 3:07
    看上去是对的,那么返回到设备中。
  • 3:08 - 3:10
    好了,现在进行最终测试。
  • 3:10 - 3:14
    我将要将quantity改成6,
    然后点击ORDER按钮,
  • 3:14 - 3:18
    噢耶,是$30。
    我们再试试其他值,以确定这不是偶然。
  • 3:18 - 3:19
    看上去是对的。看上去是对的。
  • 3:19 - 3:23
    太酷了,确实如此。
  • 3:23 - 3:24
    修复了第一个bug。
  • 3:24 - 3:26
    干得不错。
  • 3:26 - 3:29
    我们的应用一切正常。
  • 3:29 - 3:32
    但我确实承认,UI是有点丑。
  • 3:32 - 3:37
    尤其是quantity picker可以用点UI美化效果,
    我们将在下一集实现。
Title:
Fix the Order Button - Solution
Description:

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

Chinese, Simplified subtitles

Revisions Compare revisions