启动带返回结果的活动

3
可能这是一个初学者问题,但我有一些疑问。我已经搜索了很多,但没有找到答案。在启动活动以获取结果时,我们传递请求代码,并且在结果上检查相同的请求代码和结果代码。我想知道是否有一种方法可以通过使用请求代码执行不同的任务并从调用的活动中获得不同的结果,即如果多次使用不同的请求代码调用同一活动,则返回不同的结果。请告诉我如何做到这一点。我发现没有办法使用switch语句或其他任何方式来实现这一点。
我已经知道答案,所以正在编辑此内容。我想知道我是否可以使用以下场景:
Intent intent = new Intent(this, yourClass.class); 
intent.putExtras(b);
if(condition1)
startActivityForResult(intent, 1);
else
startActivityForResult(intent, 2);

我的 Activity 调用返回请求码 1 和 2 两种不同的结果,这样我就可以拥有:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    //could replace it with a switch
    if (requestCode == 1){
        //condition 1
            }
        else if(requestCode == 2){
          //condition2
        }
}

即使用不同的请求代码调用相同的活动,以从同一活动中获取不同的结果。
谢谢。

3个回答

2

我对发布的问题理解不太清楚,您可以随时使用activityForResult切换活动,并在onActivityResult方法中检查活动结果,检查不同的请求代码。下面是一个代码演示,说明如何做到这一点:

使用以下代码切换活动:

Intent intent = new Intent(this, yourClass.class); 
intent.putExtras(b);    // here
startActivityForResult(intent, 2); //put your code along : positive integer

在这个方法中检查结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    //could replace it with a switch
    if (requestCode == 1){
        //put your code here
            }
}

被调用的活动不需要知道您的请求代码,但是如果您想要这样做,可以通过在意图中传递您的请求代码来实现,例如:

intent.putExtra("requestCode", requestCode); 

因此,在你切换到的 Activity 类中访问意图变量。

你可能想对原帖进行编辑,这样会使事情更清晰。 - faizanjehangir
当然可以这样做,您可以根据需要使用不同的请求代码启动活动,并在OnActivityResult中进行相应的检查。 - faizanjehangir
我有疑问,如何在被调用的活动中实现它。您能否根据请求代码给出示例如何实现它。在被调用的活动中,基于请求代码,我应该如何使用setResult()在不同条件下进行设置。 - Aduait Pokhriyal
你应该阅读这篇帖子以更好地理解。 - faizanjehangir

0
 @Override
public void onClick(View view) {
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, 1888);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if( requestCode == 1888 ) {

    }
}

或者

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode)
        case ACTIVITY1:
           if(resultCode == RESULT_OK)
              Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
           break;
        case ACTIVITY2:
           if(resultCode == RESULT_OK)
              Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
           break;
}

0
我不是很清楚你想做什么,但我知道你可以从第一个活动返回任何代码。
例如,假设您有一个活动 A,A 调用 startActivityForResult() 启动活动 B,然后 B 执行它需要执行的所有操作,然后返回一个resultCode,该resultCode 可以是任何您想要的值,例如 7、8、9... 等等。
然后,如果您希望您的活动执行特定的功能,则还可以使用自定义 requestCode 启动活动。因此,在调用 onActivityResult() 时,您可以检查活动是否返回了您想要的结果。

为了实现这一点,我建议您使用静态整数值,如 RESULT_1RESULT_2 ...等等。
注意:如果您希望从第一个活动调用 onActivityResult(),则必须返回正值。然后,只需使用 switch 处理不同的 resultCode 值即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接