startActivityForResult(Intent intent, int requestCode, Bundl



根据 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();
捆绑

附加包不包含我尝试传递的额外捆绑包。我缺少什么,无法检索传递给该方法的额外捆绑包数据?

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

确定我错过了一些东西,有人知道如何实现这一目标吗?

确定我错过了一些东西

我怀疑你误解了结果是如何运作的。

假设您有一个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。

捆绑

附加包不包含我尝试传递的额外捆绑包。

正确。

我错过了什么

如果要使用 getExtras() 检索值,请使用putExtras()或单个putExtra()方法。

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

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

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

一般来说,这是有效的。例如,此示例应用自 Android 1.0 以来一直有效。启动器活动使用 putExtra() 添加额外的字符串;另一个活动使用 getStringExtra() 来获取值。

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

最新更新