我有四项活动,比如A,B,C和D. 我的情况是A将通过startActivityForResult启动活动B.
startActivityForResult(new Intent(this,B.class),ONE);
在其他情况下,我将B与其他情况。喜欢
startActivityForResult(new Intent(this,B.class),TWO);
在B中,我需要根据requestCode调用C或D.即如果ONE需要启动C else D.
所以我需要知道如何检查子Activity中的requestCode(这里是B)
换句话说,我想获得活动B开始的请求代码。
答案 0 :(得分:122)
您可以通过put extra传递请求代码。
intent.putExtra("requestCode", requestCode);
或者,如果您多次使用startActivityForResult
,那么比编辑每个override
更好,您可以startActivityForResult
Activity
中的@Override
public void startActivityForResult(Intent intent, int requestCode) {
intent.putExtra("requestCode", requestCode);
super.startActivityForResult(intent, requestCode);
}
,在此处添加代码< / p>
{{1}}
因此无需编辑所有startActivityForResult
希望它能帮到你
答案 1 :(得分:25)
请求代码不会自动传递给已启动的活动,因为它不会(也不应该)知道此值。它只需要知道该做什么而不是从哪里开始。
启动活动实际上只是调用方法的另一种形式。当您调用方法时,您会同步收到结果(就在您拨打电话的地方)。在这种情况下,您只传递方法需要执行其工作的信息。你没有告诉你从哪里打电话。
启动活动是调用方法的异步模拟,在这种情况下,您将在特殊方法onActivityResult()中接收结果。在这种方法中,您需要知道如何处理刚刚收到的结果,并且您有此请求代码。
为了更清楚一点,为什么将请求代码作为参数传递不是一个好主意,请考虑显示您可以购买的产品的示例活动。在此活动上有两个标记为“购买”和“登录”的按钮(因为您当前未登录)。按“登录”将启动名为“登录”的活动,该活动将尝试使用提供的信息登录用户。按“购买”将首先启动相同的“登录”活动,如果登录成功,则启动购买活动。
现在,“登录”按钮使用请求代码1来启动登录活动,但“购买”按钮不能使用相同的请求代码,因为如果登录成功,它将不得不做一些不同的事情。因此,“购买”按钮使用请求代码2。
在“登录”活动中,您可能会收到两个不同的请求代码,具体取决于调用它的位置,但您需要执行相同的过程。
因此,如果您将请求代码作为参数传递,您将最终得到的代码需要为几个不同的请求代码执行相同的操作,例如:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
您最终还会将请求代码常量存储在一个中心位置,例如一个名为RequestCodes的类。
简而言之,请求代码只应用于决定如何处理收到的结果。这样,您最终将获得更模块化,更易于维护且更易于扩展的代码。
答案 2 :(得分:7)
我最终使用自定义Intent操作将此类信息传递给启动Activity。
protected static final String ACTION_DO_C = "do_c";
protected static final String ACTION_DO_D = "do_d";
然后你就像:
final Intent intent = new Intent(this,B.class)
intent.setAction(ACTION_DO_C);
startActivityForResult(intent,ONE);
在活动B
中,您可轻松获得操作:
getIntent().getAction();
答案 3 :(得分:0)
您可以使用getCallingActivity()获取开始当前活动的活动,该活动将在结尾处收到带有响应代码的结果值。