Что работает Fine
У меня есть 2 действия в моем приложении. Первая активность вызывает вторую результативность результатов.
Второе действие показывает новый макет и позволяет пользователю выполнять определенные действия. Существует кнопка "ОК" . Когда пользователь нажимает эту кнопку, вторая активность завершается, и пользователь возвращается к первой активности.
Под капотом первая активность вызывает вторую активность:
Intent intent = new Intent(this, NextAct.class);
intent.putExtra("input", input);
this.startActivityForResult(intent, 99);
Нажмите кнопку "ОК" , вторая активность возвращается с результатом следующим образом:
Intent intent = new Intent();
intent.putExtra("output", output);
setResult(RESULT_OK, intent);
finish();
После этого первая операция onActivityResult вызывается с результатами успешно:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// requestCode is 99
// resultCode is -1
// data holds my output
}
Над настройкой работает отлично
Что не работает
Теперь у меня было простое требование, я хотел, чтобы пользователь закрыл второе действие не с помощью кнопки "ОК" , но естественным образом с кнопкой "ОБНОВЛЕНИЕ ОБСЛУЖИВАНИЯ".
Я попытался переместить логику setResult в onStop и onDestroy методы второй активности, но оказалось, что onActivityResult первой активности вызывается перед onStop или onDestroy методами второй активности и в результате setResult логика не получает возможности запускать на всех.
Затем я попытался переместить логику setResult в метод onPause второй активности, подобный этому
protected void onPause() {
super.onPause();
Intent intent = new Intent();
intent.putExtra("output", output);
setResult(RESULT_OK, intent);
//finish(); enabling or disabling this does not work
}
Но хотя onPause вызывается задолго до того, как функция onActivityResult и setResult работает правильно, все же я получаю все значения null в onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// requestCode is 99
// resultCode is 0
// data comes as null
}
Мне нужно знать, почему это происходит, и если onResume не является подходящим местом для установки логики setResult, что является самым естественным способом сделать это?
Большое спасибо.