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

时间:2016-02-15 18:55:00

标签: 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);

检索数据时:

@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);,但又没有成功。

我确信我错过了有人知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:15)

  

我确信我错过了一些东西

我怀疑你误解了结果如何起作用。

假设您有HomeActivitySettingsActivityHomeActivity使用一些参数启动SettingsActivity,并希望知道某些结果。以下是它的工作原理:

HomeActivity

这是您打开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...
        }
    }
}

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();
}

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

答案 1 :(得分:6)

  

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问题,提供设置和检索额外内容的代码,以及症状的详细说明。