【发布时间】:2014-09-21 10:55:52
【问题描述】:
首先,我不确定在设计方面是否是最好的方法,但我对 Android 有点陌生,对 Xamarin.Forms 也很陌生。我的设置是 Xamarin.Forms PCL 中的一系列ContentPages,它们都处理来自 REST 服务的信息。此服务在登录时授予WorkToken,然后应用程序会保留该WorkToken,以便执行进一步的操作。我将其存储在ISessionManager 中。
我的问题是工作流程问题。我有一个LoginPage,如果他们的会话已经结束/出现故障/无论如何,我想将其呈现给用户;基本上,如果他们没有登录并尝试做任何事情,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,让他们继续他们离开的地方。大多数情况下,所有这些都发生在 PCL 中,但我创建了一个 ISessionManager 的 Android 实现,它在每个 ContentPage 的覆盖 OnAppearing 方法上进行查询。每个页面都会调用ISessionManager 的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 中的基本导航工作流之外,没有发现太多内容。
编辑:我发现了类似于我在这里尝试做的事情:How to pass variables from a new intent back to the class that created it in android,但在 Xamarin.Forms 的上下文中。如果 Forms.Context 中存在 startActivityForResult 将解决我的问题,但似乎没有等价物。
【问题讨论】:
标签: c# android xamarin.forms