首先,我不确定在设计方面是否是最好的方法,但我对 Android 有点陌生,对 Xamarin.Forms 也很陌生。我的设置是 Xamarin.Forms PCL 中的一系列ContentPage
s,它们都处理来自 REST 服务的信息。此服务在登录时授予WorkToken
应用程序随后保留的 a,以便执行进一步的操作。我将它存储在一个ISessionManager
.
我的问题是工作流程问题。如果他们的会话已经结束/出现故障/无论如何,我有一个LoginPage
我想向用户展示的内容;基本上,如果他们没有登录并尝试做任何事情,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,让他们继续他们离开的地方。大多数情况下,所有这些都发生在 PCL 中,但我创建了一个 Android 实现,该实现ISessionManager
在每个ContentPage
的覆盖OnAppearing
方法上进行查询。每个页面都会调用ISessionManager
'sCheckLogin
来执行此操作,如果他们没有登录,它将创建一个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
,但似乎没有等价物。