Я пытаюсь установить результат после нажатия кнопки НАЗАД. Я звоню на Дестрой
Intent data = new Intent();
setResult(RESULT_OK, data)
Но когда дело доходит до
onActivityResult(int requestCode, int resultCode, Intent data)
resultCode равен 0 (RESULT_CANCELED), а данные - «null».
Итак, как я могу передать результат действия, прекращенного кнопкой НАЗАД?
Activity
результат должен быть установлен передfinish()
вызовом. Нажатие НАЗАД фактически вызываетfinish()
ваш вызовactivity
, поэтому вы можете использовать следующий фрагмент:Если вы звоните
NavUtils.navigateUpFromSameTask();
вonOptionsItemSelected()
,finish()
называется, но вы получите неправильноresult code
. Таким образом , вы должны позвонитьfinish()
неnavigateUpFromSameTask
вonOptionsItemSelected()
. неправильный код запроса в onActivityResultисточник
finish
нужно делать сonPause
иonDestroy
? Они совершенно не связаны, за исключением того, чтоfinish
запускает процесс завершения , частью которогоonPause
иonDestroy
является.Если вы хотите установить некоторые пользовательские
RESULT_CODE
вonBackPressed
случае , то вам необходимо сначала установить ,result
а затем вызвать ,super.onBackPressed()
и вы получите то же самоеRESULT_CODE
в деятельности вызывающего абонентеonActivityResult
методыисточник
Я реорганизовал свой код. Изначально я подготовил некоторые данные и установил их как
activity result
вonDestroy
(это не сработало). Теперь я устанавливаюactivity
данные каждый раз, когда возвращаемые данные обновляются и ничего не получаюonDestroy
.источник
setResult()
, ваши данные будут потеряны.Вы должны переопределить onOptionsItemSelected следующим образом:
источник
обращаться onActivityResult (int, int, Intent)
Решение - проверить resultCode на значение Activity.RESULT_CENCELED . Если да, то это означает, что либо была нажата НАЗАД, либо действие завершилось сбоем. Надеюсь, это сработает для вас, ребята, работает для меня :).
источник
onDestroy
слишком поздно в цепочке - вместо этого переопределитеonPause
иisFinishing()
проверьте, находится ли ваша активность в конце своего жизненного цикла.источник
Попробуйте переопределить onBackPressed (с уровня Android 5 и выше) или переопределить onKeyDown () и поймать KeyEvent.BUTTON_BACK (см. Результаты активности Android ). Это помогает мне.
источник
Не полагайтесь на какую-либо логику, выполняемую в onPause одного действия, когда вы вернетесь к исходному. Согласно документам:
См. Http://goo.gl/8S2Y .
Самый безопасный способ - установить результат после завершения каждой операции изменения результата (как вы упомянули в своем ответе)
источник
Я вставляю ответ, может быть, будет полезен другим людям: когда установлен режим запуска с android: launchMode = "singleTask", я также не могу получить результат, в документе говорится:
и:
источник