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