У меня есть два вида деятельности: PictureList и AddPictures. От деятельности PictureList я запрашивающая деятельность результата, как это:onActivityResult не получил правильного результата после возвращения, потому что активизированная его деятельность была воссоздана?
Intent myIntent = new Intent(PictureList.this, AddPictures.class);
Bundle b = new Bundle();
b.putInt("iEntry", clickCounter);
b.putBoolean("bAddPicture", true);
b.putBoolean("bEditPicture", false);
myIntent.putExtras(b);
startActivityForResult(myIntent,1);
Я также реализующего соответствующие onActivityResult здесь:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK){
iReturnedEntry = data.getIntExtra("iReturnedEntry", 0);
}
if (resultCode == RESULT_CANCELED) {
}
}
}
}
С другой деятельностью, AddPictures, принимают параметры:
Bundle b = getIntent().getExtras();
iEntry = b.getInt("iEntry");
bAddPicture = b.getBoolean("bAddPicture", false);
bEditPicture = b.getBoolean("bEditPicture", false);
и когда он должен вернуться он делает это так:
Intent returnIntent = new Intent();
returnIntent.putExtra("iReturnedEntry", iEntry);
setResult(RESULT_OK,returnIntent);
Обычно приложение работает нормально, но очень часто бывает, что результат не сохраняется. Я думаю, что из-за какого-либо управления памятью или по другой причине активность PictureList воссоздается или снова вызывает метод onCreate после возвращения из активности AddPictures, и из-за этого onActivityResult не работает. Как я могу решить эту проблему?
Спасибо Фил. Я понимаю, что действия создаются и уничтожаются часто и что это нужно обрабатывать с помощью onPause и onResume, но что происходит, когда вы вызываете startActivityForResult из одного действия, а позже это действие воссоздается, когда вы возвращаетесь с результатом? Как работает onActivityResult в этом случае? –
Я обнаружил трудный способ, с помощью которого onActivityResult() вызывается до onCreate() в ситуации воссоздания вызывающей активности. Таким образом, самый безопасный подход - просто сохранить ответ на переменную экземпляра в onActivityResult(), а затем действовать на нее в onResume(). Поскольку onResume() вызывается даже тогда, когда onCreate() не выполняет эту функцию для обоих сценариев без какой-либо условной логики. Конечно, вам нужно очистить переменную экземпляра как последнюю часть onResume(), чтобы в следующий раз через нее снова не использовать. – Phil
Я последовал твоему предложению, но это не сработало. in onActivityResult Я сохранил ответ, а также активировал логический флаг, который позже я проверил в onResume. Впоследствии, когда флаг отмечен как true, я загрузил возвращаемые значения, но все же они были пустыми. –