请求代码不会自动传递到启动的活动,因为它d oesn't(也不应该)需要知道这个值。它只需要知道该做什么,而不需要从哪里开始。
开始的活动是真的调用一个方法的另一种形式。当你调用一个方法时,你会同步地收到结果(就在你拨打电话的地方)。在这种情况下,您只传递该方法需要完成其工作的信息。你不是在告诉它你从哪里来的。
启动一个活动是调用一个方法,在这种情况下会出现在结果的特殊方法的异步模拟onActivityResult()。在这种方法中,你需要知道你刚刚收到的结果该怎么做,并且你有这个请求代码。
为了使它更清楚一点,为什么它不是一个好主意传递请求代码作为参数,考虑该图是一个产品,你可以买到的例子活动。在此活动中,有两个按钮分别标记为“购买”和“登录”(因为您目前尚未登录)。按“登录”将启动名为“登录”的活动,该活动将尝试使用提供的信息登录用户。按“购买”将首先启动完全相同的“登录”活动,如果登录成功,则开始购买活动。
现在,“登录”按钮使用请求码1,启动登录活动,但“购买”按钮不能使用相同的请求的代码,因为它会做不同的事情,如果登录成功。所以,“购买”按钮使用请求代码2.
在不同的地方它是从叫您可能会收到两个不同的请求代码“登录”的活动,但你需要做的非常相同的程序。
所以,如果你在请求代码作为参数传递,你将最终需要做同样的东西了几个不同的请求代码,如代码:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
你也最终将请求代码常量存储在一个中心位置,例如一个名为RequestCodes的类。
简而言之,请求代码只能用于决定如何处理收到的结果。通过这种方式,您将获得更多模块化,更易于维护和更容易扩展的代码。
难道真的没有办法了孩子的活动,以获取其请求码? – 2011-06-23 00:33:42
直到现在我对最好的知识,我认为没有其他办法。 – 2011-06-23 04:30:57
想知道同样的事情 - 这是Android API中那些没有任何逻辑意义的东西之一。 – 2011-07-29 21:34:50