У меня есть основной вид деятельности A, который может запускать подэтапы B, C или D. Я запускаю их с помощью startActivityForResult (newIntent, REQUEST_CODE);
Пользователь может выбирать между B, Cи D один раз отображается.Деятельность A управляет этой навигацией.Когда они выбирают своп между экранами 'A', сначала вызывается finishActivity (REQUEST_CODE);на отображаемом, а затем вызовите startActivityForResult (newIntent, REQUEST_CODE);для следующего.
В моем onActivityResult у меня есть
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// these logs are just for my debugging
Log.w(this.toString(), "onActivityResult returned to by " + requestCode);
Log.w(this.toString(), "result code = " + resultCode );
// the Activity set this value if it was returning normally
if (RESULT_OK == resultCode)
{
Log.i(this.toString(), "---- the sub-activity returned OK ----");
// do some stuff
}// end if (RESULT_OK == resultCode)
// Else we got here because the user hit the back button or something went
// went wrong (RESULT_CANCELED). Either way we do not want to display this
// blank screen to the user. Take them back to the device connection screen.
else if (RESULT_CANCELED == resultCode)
{
finish();
}
}
По какой-то причине я каждый раз получаю обратно ноль или RESULT_CANCELED, хотя в моих под-действиях B, C, DI устанавливает этот результат только в том случае, если пользователь решает нажать кнопку «Назад» (я отображаю диалоговое окно «Вы уверены», и они выбирают выход. В B, C, D у меня есть следующее в onPause. UserExiting - это флаг, который я установилиз диалогового окна «Выход».
protected void onPause()
{
Log.i(this.toString(), "onPause");
// hack to try to setResult for an activity whose finishActivty was called
if ( !this.exiting )
{
Log.i(this.toString(), "======== RESULT_OK ========");
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
}
displayed = false;
super.onPause();
}
Есть идеи?
Правка - чтобы прояснить ситуацию, проблема заключается в том, что после вызова finishActivty в старом Activity, поскольку результат никогда не был установлен, Activity A всегдадумает, что должно выйти. Одна странная сторона. Это не происходит, пока пользователь не переместится два раза. Другими словами, отображается B, и они выбирают перейти к C. Работает, но я вижу в журнале, что onActivityResult не имеетПользователь выбирает переход от C к D, бум, я вижу два вызова onActivtyResult: «A; выходы и D остаются, и пользователь не может уйти.
Обновление: так как это имеетбПолучив много просмотров, я решил опубликовать это обновление.Проект развивался таким образом, что иногда отображается одно действие, а иногда группа отображается в виде вкладок.Когда пользователь выходит из вкладки, в некоторых случаях необходимо было возвращать данные в действие, которое открывалось на вкладках.Прежде чем я добавлю код ниже, RESULT_CANCELED всегда будет возвращаться.Также убедитесь, что setResult вызывается перед финишем.
if (getParent() == null)
{
setResult(Activity.RESULT_OK, intent);
}
else
{
getParent().setResult(Activity.RESULT_OK, intent);
}