Вопрос

Прежде всего, я не уверен, что подхожу к этому лучше всего с точки зрения дизайна, но я немного новичок в Android и очень новичок в Xamarin.Forms.Моя установка представляет собой серию ContentPages в PCL Xamarin.Forms, которые работают с информацией из службы REST.Эта услуга при входе в систему предоставляет WorkToken которое приложение затем сохраняет для выполнения дальнейших операций.Я храню это в ISessionManager.

Моя проблема связана с рабочим процессом.у меня есть LoginPage что я хочу сообщить пользователю, завершился ли его сеанс/сбой/что-то еще;по сути, если они не вошли в систему и не пытаются что-либо сделать, я хочу поместить эту страницу в стек и заставить их попытаться войти в систему, и если они предоставят действительные учетные данные, позвольте им продолжить с того места, где они остановились.Все это происходит по большей части в PCL, но я создал реализацию Android ISessionManager который запрашивается на каждом ContentPageпереопределено OnAppearing метод.Каждая страница вызывает ISessionManager's CheckLogin который сделает именно это, и если они не вошли в систему, это создаст Intent и начать LoginActivity через это. LoginActivity по сути просто оборачивается вокруг PCL LoginPage.

Проблема, с которой я сталкиваюсь, заключается в том, что, делая это таким образом, LoginActivity запускается асинхронно поверх любой страницы, которая его вызвала.Однако эта вызывающая страница находится в нерабочем состоянии, поскольку она еще не инициализирована должным образом через службу REST.Я думаю, что есть два возможных решения.Либо запустите Intent синхронно (что я не считаю возможным) или переосмыслить свой дизайн.Вот Intent настраивать:

var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);

Я проверил несколько форумов Xamarin на наличие соответствующих сообщений по этому поводу, но не нашел ничего, кроме базовых рабочих процессов навигации в Xamarin.Forms.

Редактировать:Я нашел что-то аналогичное тому, что пытаюсь сделать здесь: Как передать переменные из нового намерения обратно в класс, который его создал в Android, но в контексте Xamarin.Forms.А startActivityForResult решило бы мою проблему, если бы она существовала в Forms.Context, но похоже, что нет эквивалента.

Это было полезно?

Решение

Почему вы создаете LoginActivity?это потому что нужно использовать что-то родное от андроида?

Моя первая мысль заключается в том, что после того, как вы проверите статус токена на OnAppearing, вы можете решить, нажимать или нет модальное окно для страницы входа в систему, после того, как вход пользователя завершен и токен сохранен, вы можете нажать модальное окно, и оно покажет предыдущую страницу, на которой был пользователь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top