【问题标题】:Handle data from several activities in one onActivityResult()?在一个 onActivityResult() 中处理来自多个活动的数据?
【发布时间】:2023-03-22 14:19:01
【问题描述】:

我想知道是否可以处理来自例如的数据。活动 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 的用途。

标签: android onactivityresult


【解决方案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
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多