我有四个活动,比如A、B、C和D。我的情况是A将通过startActivityForResult启动活动B。
startActivityForResult(new Intent(this,B.class),ONE);
在另一种情况下,我将使用不同的请求代码启动活动B,例如:
startActivityForResult(new Intent(this,B.class),TWO);
在B中,我需要根据请求代码调用C或D。也就是说,如果一个需要启动C,否则D。
因此,我需要知道如何检查子Activity(此处为B)中的requestCode。
换句话说,我想获取启动Activity B的请求代码。
4条答案
按热度按时间whhtz7ly1#
您可以通过放置额外的请求代码。
或者,如果您已经多次使用
startActivityForResult
,那么比编辑每个startActivityForResult
更好的是,您可以在Activity
中使用override
startActivityForResult
,并在那里添加代码,如下所示因此,无需编辑所有startActivityForResult
希望对你有帮助
jrcvhitl2#
请求代码不会自动传递给已启动的Activity,因为它不需要(也不应该)知道这个值。它只需要知道要做什么,而不需要知道它是从哪里启动的。
启动一个活动实际上只是调用一个方法的另一种形式。当你调用一个方法时,你会同步地接收结果(就在你调用的地方)。在这种情况下,你只是传递了方法工作所需的信息。你并没有告诉它你是从哪里调用它的。
启动Activity是调用方法的异步模拟,在这种情况下,您将在特殊方法onActivityResult()中接收结果。在此方法中,您需要知道如何处理刚刚接收到的结果,并且您有此操作的请求代码。
为了更清楚地说明为什么将请求代码作为参数传递不是一个好主意,考虑一个展示你可以购买的产品的示例活动。2在这个活动上有两个按钮,分别标为“购买”和“登录”(因为您当前尚未登录)。按“登录”将启动名为“登录”的活动,该活动将尝试使用提供的信息登录用户。按“购买”将首先启动完全相同的“登录”活动,如果登录成功,则启动购买活动。
现在,“登录”按钮使用请求代码1来启动登录活动,但“购买”按钮不能使用相同的请求代码,因为如果登录成功,它将不得不执行不同的操作。因此,“购买”按钮使用请求代码2。
在“登录”活动中,您可能会收到两个不同的请求代码,具体取决于调用它的位置,但您需要执行完全相同的过程。
因此,如果您将请求代码作为参数传入,您将得到需要为几个不同的请求代码执行相同操作的代码,例如:
最后,您还需要将请求代码常量存储在一个中心位置,例如一个名为RequestCodes的类。
简而言之,请求代码应该只用于决定如何处理接收到的结果,这样你将得到一个更模块化、更易于维护和扩展的代码。
wtlkbnrh3#
我最终使用自定义Intent操作将此类信息传递给启动Activity。
然后你会说:
在练习
B
中,你可以很容易地完成以下动作:p1tboqfb4#
您可以使用getCallingActivity()来获取启动当前Activity的Activity,该Activity将接收结果值,并在末尾显示响应代码。