【问题标题】:Start Activity for result开始活动以获得结果
【发布时间】:2012-08-08 07:54:36
【问题描述】:

这可能是一个菜鸟问题,但我有一些疑问。我用谷歌搜索了很多,但一无所获。 在为结果启动活动时,我们传递请求代码,并在结果上使用相同的请求代码和结果代码进行检查。我想知道是否有一种方法可以通过使用请求代码来实现执行不同的任务并从被调用的活动中获得不同的结果,即如果使用不同的请求代码多次调用相同的活动,那么它会返回不同的结果。请告诉我该怎么做。我发现没有办法使用 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
        }
}

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

谢谢

【问题讨论】:

标签: android android-activity start-activity


【解决方案1】:

发布的问题对我来说不是很清楚,您始终可以切换一个 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); 

因此,访问您切换到的活动类中的意图变量..

【讨论】:

  • 您可能想对您的原始帖子进行编辑..这会使事情更清楚
  • 是的,当然你可以这样做,你可以根据你的要求使用不同的请求代码 startActivityForResult 并在 OnActivityResult 中检查它们,反之亦然..
  • 如何在我所怀疑的被调用活动中实现它。您能否根据被调用活动中的请求代码举例说明如何做到这一点。根据调用的Activity中的请求代码,不同条件下如何使用setResult()。
  • 你应该通过this post更好地理解
【解决方案2】:
 @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;
}

【讨论】:

    【解决方案3】:

    我真的不明白你想要做什么,但我知道你可以将任何你想要的代码从第一个活动返回。
    例如,假设你有一个活动 A,A 调用 startActivityForResult() 到活动 B,然后 B 做任何事情,然后返回一个 resultCoderesultCode 可以是你想要的任何东西,比如 7 , 8, 9.... 随便什么。
    然后,如果您希望您的活动做特定的事情,那么您也可以使用自定义 requestCode 启动它,因此当 onActivityResult() 被调用时,您可以检查活动是否返回您想要的内容。

    为此,我鼓励您使用静态整数值,例如 RESULT_1RESULT_2...

    注意:如果您想从第一个活动中调用onActivityResult(),则必须返回正值。然后只需使用一个开关来处理不同的resultCode 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多