Как обращаться с кнопкой "назад", когда активен startActivityForResult?
У меня есть простая форма, в которой пользователь может добавлять, редактировать и удалять людей из списка. Когда пользователь решил изменить человека, он запускает startActivityForResult, чтобы он мог внести соответствующие изменения и обновить список после завершения редактирования. Если пользователь нажимает кнопку "Назад" на экране редактирования, появляется сообщение об ошибке закрытия.
Я считаю, что это имеет какое-то отношение к системе, ожидающей результата, и я не поймаю ее правильно. Как я поймаю эту ошибку?
Вот действующий код onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
String person = extras.getString("person");
mDbHelper.addPerson(person);
fillData();
break;
case ACTIVITY_EDIT:
Long rowId = extras.getLong("_id");
if (rowId != null) {
String editPerson = extras.getString("person");
mDbHelper.updatePerson(rowId, editPerson);
}
fillData();
break;
}
}
Спасибо за любую помощь.
Ответы
Ответ 1
Прежде всего, посмотрите на трассировку стека с помощью DDMS, он расскажет вам, в какой строке происходит исключение.
Что вы можете сделать в своей деятельности по вызову, это проверить для resultCode
, а в вашей активности вы можете установить setResult()
.
Например, если пользователь нажал назад, resultCode будет RESULT_CANCELED. Если это так, не пытайтесь извлечь данные из намерения.
Ответ 2
Вы хотите обернуть свою активность в операторе if и проверить resultCode перед доступом к набору намерений:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
// Add this line:
if (resultCode == RESULT_OK) {
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
break;
case ACTIVITY_EDIT:
break;
}
}
}
Ответ 3
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
// do your code here
}
}