【问题标题】:startActivityForResult(Intent intent, int requestCode, Bundle options) how to retrieve the extra bundle option?startActivityForResult(Intent intent, int requestCode, Bundle options) 如何检索额外的捆绑选项?
【发布时间】:2016-02-15 18:55:00
【问题描述】:

根据 Android 文档public void startActivityForResult (Intent intent, int requestCode, Bundle options)

我不知道如何检索我传递给意图的额外捆绑选项。

当我调用 startActivityForResult 方法时,我想传递一个带有数据的 ArrayList 作为额外的捆绑选项。

代码示例:

ArrayList<String> list = new ArrayList<>();
        list.add("test1");
        list.add("test2");

        Bundle bundleOptions = new Bundle();
        bundleOptions.putStringArrayList("key", list);

startActivityForResult(intent, 10, bundleOptions);

在检索数据时:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)

Bundle extras = data.getExtras();

Bundle extras 不包含我试图传递的额外包。我缺少什么并且无法检索传递给该方法的额外 Bundle 数据?

我也尝试使用intent.putExtra("key", bundleOptions);,也尝试使用intent.putExtra("key", list);,但也没有成功,并调用方法startActivityForResult(intent, 10);,但再次没有成功。

我确定我遗漏了一些东西有人知道如何实现吗?

【问题讨论】:

  • 你从哪里执行调用?片段?活动 ? onActivityResult 在哪里? Intent data 是空的还是空的?
  • 我从一个类中的 Activity 执行,然后在另一个类中检索数据。代码工作正常,我试图在检索活动中传递额外的参数。感谢您为我提供帮助的时间和精力。
  • 在调用结果回调时,您确定发送的 Activity 还活着吗?
  • 这是一个我不知道的问题,我怎么能确定呢?我可以检索意图的数据,但不能检索我试图传递的额外参数。
  • 首先在活动onDestroy和结果回调中添加日志消息

标签: android android-intent android-activity


【解决方案1】:

我确定我错过了什么

我怀疑你误解了结果的工作原理。

假设您有一个HomeActivity 和一个SettingsActivityHomeActivity 使用一些参数启动 SettingsActivity 并想知道一些结果。以下是它的工作原理:

家庭活动

这就是你打开SettingsActivity的方式:

public void openSettings() {
    Intent i = new Intent(this, SettingsActivity.class);
    i.putExtra("myParam", 1);
    startActivityForResult(i, 10);
}

这是您在SettingsActivity 关闭时收到的电话:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 10) {
        if (resultCode == RESULT_OK) {
            // Get result from the result intent.
            String result = data.getStringExtra("myResult");

            // Do something with result...
        }
    }
}

设置活动

这只是必要的部分。读取输入,构建输出并自行关闭。我希望这足以进行演示。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Retrieve the parameter.
    int param = getIntent().getIntExtra("myParam");

    // Get a result somewhere.
    String resultValue = "RESULT=" + param;

    // Build a result intent and post it back.
    Intent resultIntent = new Intent();
    resultIntent.putExtra("myResult", resultValue);
    setResult(RESULT_OK, resultIntent);
    finish();
}

看到这个http://developer.android.com/training/basics/intents/result.html

【讨论】:

  • 是的,我想念如何使用它,因为我完全是 Android 新手,我正在尝试构建一些有点复杂的东西。感谢您的时间和精力。
  • 感谢您的回答
【解决方案2】:

Bundle extras 不包含我试图传递的额外捆绑包。

正确。

我错过了什么

如果您希望使用getExtras()use putExtras() 或单独的putExtra() 方法检索值。

我无法检索传递给该方法的额外 Bundle 数据?

startActivity()/startActivityForResult() 的第三个参数是将选项传递给 Android 本身,而不是将数据传递给另一个活动。

我也尝试过... intent.putExtra("key", list);但也没有成功

一般来说,这是可行的。例如,this sample app 从 Android 1.0 开始就可以使用。启动器活动使用putExtra() 额外添加一个字符串;其他活动使用getStringExtra() 获取值。

如果您在使用 putExtra() 时仍然遇到问题,请发布一个单独的 Stack Overflow 问题,在其中提供用于设置和检索额外内容的代码,以及您的症状的详细描述。

【讨论】:

  • 那太好了,我想我误解了如何使用 startActivityForResult()。既然您提到“startActivity()/startActivityForResult() 的第三个参数是将选项传递给 Android 本身,而不是将数据传递给另一个活动。”,可以提供一个例子吗?感谢您的时间和精力。
  • 是的,你是对的,有很多选项可以传递,这将使它成为一个非常长的例子。感谢您指出链接。
  • @Thanos:更多的是我没用过,也没见过用过,所以手头没有例子。
猜你喜欢
  • 2012-06-07
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多