Android Activity setResult не сохраняется?

Итак, я пытался взломать, чтобы быстро решить проблему, с которой я столкнулся, описанную в еще один вопрос, который я разместил.

У меня есть вспомогательное действие, которое было запущено моим основным действием, и оно также может быть остановлено основным действием, вызывающим на нем finishActivity(requestCode). Однако вспомогательное действие всегда возвращает 0 после вызова finishActivity, хотя я устанавливаю этот результат в вспомогательном действии только в том случае, если пользователь нажимает кнопку «Назад». Я пытался обмануть, вызвав setResult(RESULT_OK) в методе onResume субактивности, но похоже, что это не имеет значения;

Кроме того, по какой-то причине требуется много времени, прежде чем появятся onActivityResults. Это нормально?

Спасибо за любой совет!


person bursk    schedule 11.11.2010    source источник


Ответы (1)


Наблюдал такое же поведение. В основном классе, который вызывает finishActivity(), мне нужно было запомнить идентификатор действия, которое я принудительно закрыл, поэтому, когда оно возвращается обратно в onActivityResult, я могу различить два случая:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_CANCELED) {
        switch (requestCode) {
            case OUTSOURCED_INTENT:
            {
                if(mForcedClosingOfOutsourcedActivity)
                {
                    //Handles case of forced closing
                }
                else
                {
                    //Handles case of normal closing from Activity
                }
            }
            break;
        }
    }
}    

Определенно, нехорошо ждать так долго, пока Activity закроется.

person Zelimir    schedule 12.11.2010
comment
Да, у меня происходит что-то странное. Я уже проверяю requestCode и знаю, что это моя дополнительная деятельность. У меня есть две основные проблемы: (1) я всегда возвращаю RESULT_CANCELED, даже если я вызываю setResult(RESULT_OK) в своих onCreate и OnResume - person bursk; 12.11.2010
comment
(2) после вызова finishActivity я не получаю немедленного возврата, на самом деле это может занять некоторое время. Как будто что-то мешает уничтожению субактивности. - person bursk; 12.11.2010
comment
Объявление (1): не совсем бессмысленно получать RESULT_CANCELED, потому что при вызове finishActivity() он отменяется, а не завершается, как ожидалось. Код, который я привожу, является примером того, как преодолеть такое поведение. - person Zelimir; 12.11.2010
comment
Спасибо, я закончил тем, что сделал аналогичный подход. В дополнительных действиях, если пользователь нажимает кнопку «Назад», а затем выбирает «да» на «Вы уверены, что хотите выйти?» popup, они устанавливают дополнительный статический флаг в родительском действии. Затем, когда onActivityResult попадает в родительскую активность, он выполняет двойную проверку, как у вас. - person bursk; 13.11.2010
comment
иначе если (RESULT_CANCELED == resultCode) { если (isUserExiting()) { finish(); } } - person bursk; 13.11.2010