如何启动已加载到内存中的活动

时间:2013-06-11 03:34:29

标签: android android-intent xamarin.android

我有一个应用程序,我已经从Windows移植到Andriod和iOS。在此应用程序中,应使用预定义的xml通过Reflection加载屏幕(活动),并且在启动之前需要在屏幕(活动)上完成一些业务逻辑。所以问题是如何启动我已经加载的Activity。示例代码如下:

MyActivity activity = Activity.LoadActivityFromReflection(/* some parameters passed*/);
DoSomeWork_PrepareAndBindActivityToItsController(activity);
// now how can I start this activity. I know I could do the following 
Intent intent = new Intent(Application.Context, typeOf(MyActivity));
startActivity(intent);

但我担心这会重新实例化活动,所有为准备和绑定它而完成的工作都会消失。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我知道能够以任何一致性存储数据并重新访问数据的唯一方法是将其放在Application类中。据我了解整个Android生命周期,我不知道我是否会推荐这条路线。如果您尝试明确定义,我发现很难确保使用正确的参数启动Activity。

例如,如果您只是转动设备,则会调用OnCreate活动(加上onresume等)。因此,如果您试图以编程方式控制布局,或者花费一些时间来完成定义布局的初始工作,您可能只想在销毁时将值存储在包中,并在重新加载时尝试使用保存的值作为你以前有过。

答案 1 :(得分:0)

以下是Xamarin的答案,我在这里发帖是为了帮助那些试图做同样事情的人。此外,我找到了解决此问题的方法,一旦完成,我将在此处发布我的解决方案。

亲爱的,

通过反射加载Activities听起来像一个有趣的方法。由于我自己没有尝试过,我不是百分百肯定这会回答你的问题,但这是我的第一个想法:

您似乎正在构建要显示的Activity的特殊实例。为了使这项工作,你需要一种方法将实例推送到“task stack”(http://developer.android.com/guide/components/tasks-and-back-stack.html),但是不可能直接操作现有的任务堆栈(在{105的幻灯片中提到) {3}})。实际上,即使使用TaskStackBuilderhttp://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack)生成全新的任务堆栈,也需要使用Intents

  

简而言之,Intents是在Android中启动活动的唯一方式。

我认为在您的情况下,最直接的解决方案是通过反射创建整个MyActivity 。然后你可以使用Intent并以正常方式启动Activity。 “DoSomeWork_PrepareAndBindActivityToItsController(activity)”可能是“onStart()”回调的一部分。

最佳, Brendan @ Xamarin