У меня есть приложение Xamarin для Android, и у меня есть три действия A, B, C. Активность А начинается B, которая может или не может начать C. Я хочу Активность А, чтобы получить результаты от любой активности B или C.Операционная система Android не работает как ожидается
Если активность B никогда не начинается деятельность CI может успешно получить данные обратно активности A, делая
Intent intent = new Intent();
intent.PutExtra("DataId", item.Id);
SetResult(Result.Ok, intent);
Когда пользователь хочет начать деятельность C, то я использую этот код, чтобы разрешить пересылку результата от деятельности C обратно к активности
Intent intent = new Intent(this, typeof(ActivityC));
intent.PutExtra("DataId", dataId);
intent.SetFlags(ActivityFlags.ForwardResult);
StartActivity(intent);
Если активность B начинается активность C, а затем активность C хочет return data Я делаю это с помощью этого кода
Intent result = new Intent();
result.PutExtra("DataId", dataId);
SetResult(Result.Ok, result);
Finish();
Intent intent = new Intent(this, typeof(ActivityA));
intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
StartActivity(intent);
Все это хорошо работает. Проблема возникает, когда активность C не хочет возвращать данные. Если я вызову Finish();
в действии C, а затем попытаюсь вызвать SetResult(Result.Ok, intent);
на активность B, эти значения из активности B никогда не будут возвращены в действие A. Они все еще используют пустые данные из активности C, хотя я никогда не называл SetResult(); `on активность C.
Нижняя линия. Как я могу получить активность B для возврата правильных данных, после запуска активности C и возврата к активности B?
При запуске активность B и активность C , вы используете StartActivityForResult, как описано здесь? https://developer.xamarin.com/recipes/android/fundamentals/activity/start_activity_for_result/ Я бы подумал, что если вы запустите B из A с помощью StartActivityForResult, а затем запустите C из B с тем же, когда вы получите результат от C в B затем установите результат из B, чтобы он вернулся к A, я бы подумал, что он должен работать. Я не вижу, чтобы вы использовали StartActivityForResult в любом месте. – jgoldberger
Я пропустил этот код. Действие A начинает действие B для результата. Вот почему 'SetResult()' работает вообще. Начальная активность C для результата и использования 'ActivityFlags.ForwardResult' выдает исключение ... – JacobK