根据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);
,但又没有成功。
我确信我错过了有人知道如何实现这个目标吗?
答案 0 :(得分:15)
我确信我错过了一些东西
我怀疑你误解了结果如何起作用。
假设您有HomeActivity
和SettingsActivity
。 HomeActivity
使用一些参数启动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。
答案 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问题,提供设置和检索额外内容的代码,以及症状的详细说明。