StartActivityForResult и Intents Дополнительно, кажется, что дополнительные функции не отбрасываются
У меня есть этот код:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setData(ContactsContract.Contacts.CONTENT_URI);
intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());
startActivityForResult(intent, PICK_CONTACT);
Затем в ответ:
public void onActivityResult(int reqCode, int resultCode, Intent data) {
switch (reqCode) {
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK) {
try {
Uri contactData = data.getData();
String onlineid = data.getStringExtra(EXTRA_ONLINE_ID);
} catch (Exception e) {
e.printStackTrace();
}
}
break;
}
super.onActivityResult(reqCode, resultCode, data);
}
переменная onlineid
имеет значение null. Как передать значение, а затем получить его обратно?
ИЗМЕНИТЬ
Я даже пробовал,
Bundle extras = data.getExtras(); // returns null
Ответы
Ответ 1
Это делается по дизайну; системные действия не будут отправлять обратно дополнительные функции, с которыми они вызываются, поэтому вам нужно управлять данными в другом месте.
К счастью, параметр resultCode
полностью контролируется вами, что означает, что вы можете использовать его для индексации ваших данных.
private final int PICK_CONTACT = 0;
private Bundle[] myDataTransfer = { null };
...
Bundle myData = new Bundle();
myData.putString(EXTRA_ONLINE_ID, (String) v.getTag());
myDataTransfer[PICK_CONTACT] = myData;
// create intent and all
startActivityForResult(intent, PICK_CONTACT);
...
public void onActivityResult(int reqCode, int resultCode, Intent data) {
if (resultCode == PICK_CONTACT) {
Bundle myData = myDataTransfer[resultCode];
String onlineid = myData.getString(EXTRA_ONLINE_ID);
}
}
Я не программист на Java, должен быть лучший способ реализовать карту Bundles, но это работает:)
Ответ 2
ok Проверьте, настроен ли ваш Activity android: launchMode как SingleTask или SingleInstance! это должна быть проблема:)
Ответ 3
У меня также были проблемы с этим.
Вместо этой строки
intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());
Try
intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag());
Ответ 4
Поле EXTRA_ONLINE_ID должно быть установлено в действии, которое вы запускали с помощью setResult. Если он не устанавливает это значение в возвращаемом намерении (которое отличается от того, что вы отправили), вы получите нулевое значение.