在一个 onActivityResult() 中处理来自多个活动的数据?

Posted

技术标签:

【中文标题】在一个 onActivityResult() 中处理来自多个活动的数据?【英文标题】:Handle data from several activities in one onActivityResult()? 【发布时间】:2013-02-06 17:55:12 【问题描述】:

我想知道是否可以处理来自例如的数据。活动 2 和活动 1 中的活动 3 有一个 onActivityResult(),或者我是否需要为每个返回数据的活动提供一个方法?

Activity 1 是应用程序的主要 Activity。

活动一:

// Handle return value from activity
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (resultCode == Activity.RESULT_OK) 
        String imageId = data.getExtras().getString("imageId");

        // Do something if data return from activity 2 ??

        // Do something if data return from activity 3 ??
    

活动 2

Intent intent = new Intent();
intent.putExtra("imageId", imagePath);
setResult(RESULT_OK, intent); 
finish();

活动 3

Intent intent = new Intent();
intent.putExtra("contactId", data);
setResult(RESULT_OK, intent);
finish();

【问题讨论】:

这就是 requestCode 的用途。 【参考方案1】:

在您的 startActivityForResult 中为活动 1 设置 requestCode:调用活动 2

Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent,10); 

调用活动 3

Intent intent = new Intent(this, Activity3.class);
startActivityForResult(intent,11); 

现在当您来到onActivityResult 时,请检查requestCode

喜欢:

 public void onActivityResult(int requestCode, int resultCode, Intent data)
 

      super.onActivityResult(requestCode, resultCode, data);

       switch (requestCode) 

          case (10): 
          
            // do this if request code is 10.
          
          break;

          case (11):
          
            // do this if request code is 11.
          
          break;
  

【讨论】:

是 super.onActivityResult(requestCode, resultCode, data);有必要吗? 派生类必须调用该方法的超类实现。如果不这样做,将引发异常。 一般来说(不是专门在 android 的东西中),当你派生时,你应该调用超类的方法,除非你知道你不应该这样做。这是一个需要根据具体情况做出的决定,但默认情况下(我会说)是您这样做。【参考方案2】:

No confusion check result code and request code..

例子:

private static final int TWO = 2;
private static final int THREE = 3;

startActivityForResult(new Intent(this,Activity2.class),TWO); // one for Activity 2
startActivityForResult(new Intent(this,Activity3.class),THREE);

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (resultCode == Activity.RESULT_OK ) 
        if(requestCode == TWO) 
            // Activity two stuff
         else if(requestCode == THREE) 
            // Activity three stuff
        
    

【讨论】:

以上是关于在一个 onActivityResult() 中处理来自多个活动的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个类中使用 onActivityResult

在一个 onActivityResult() 中处理来自多个活动的数据?

OnActivityResult 没有被调用

onActivityResult() 没有在 DialogFragment 中执行

如何在一个活动中添加多个 onActivityResult() 而不去其他活动? [复制]

拍照后onActivityResult没有调用