startActivityForResult(Intent intent,int requestCode,Bundle options)如何检索额外的bundle选项?

Tha*_*nos 4 android android-intent android-activity

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

我无法弄清楚如何检索我传递意图的额外包选项.

我想在调用startActivityForResult方法时传递一个带有数据的ArrayList作为额外的bundle选项.

代码示例:

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

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

startActivityForResult(intent, 10, bundleOptions);
Run Code Online (Sandbox Code Playgroud)

在检索数据时:

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

Bundle extras = data.getExtras();
Run Code Online (Sandbox Code Playgroud)

Bundle extras不包含我想要传递的额外包.我缺少什么,我无法检索我传递给方法的额外Bundle数据?

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

我确信我错过了什么有人知道如何实现这一点?

感谢您的时间和精力.

Eug*_*nec 15

我确信我错过了一些东西

我怀疑你误解了结果是如何起作用的.

我们假设你有一个HomeActivity和一个SettingsActivity.用一些参数HomeActivity启动a SettingsActivity并想知道一些结果.以下是它的工作原理:

HomeActivity

这是你如何打开SettingsActivity:

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

这是您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...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SettingsActivity

这只是必要的一点.读取输入,构建输出并自行关闭.我希望它足以进行演示.

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();
}
Run Code Online (Sandbox Code Playgroud)

请参阅http://developer.android.com/training/basics/intents/result.html.

  • 是的,我错过了解如何使用它,因为我完全是Android的新手,我试图构建一些有点复杂的东西.感谢您的时间和精力. (2认同)

Com*_*are 6

Bundle extras不包含我想要传递的额外包.

正确.

我错过了什么

如果您希望使用getExtras(),使用putExtras()或单个putExtra()方法检索值.

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

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

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

一般来说,这是有效的.例如,此示例应用程序自Android 1.0以来一直有效.启动器活动用于putExtra()添加额外的字符串; 其他活动用于getStringExtra()获取价值.

如果您继续使用问题putExtra(),请发布单独的Stack Overflow问题,您可以在其中提供设置和检索额外信息的代码,以及症状的详细说明.