【问题标题】:Starting an activity with an intent and getting the reference以意图开始活动并获取参考
【发布时间】:2016-08-17 02:16:32
【问题描述】:

我目前在 android 中使用 应用程序项目,它包含一个库。

这个库本身就是一个应用程序,因为我想让它集成到主应用程序中,所以我将它添加为外部库。

一切正常,我使用此代码启动库应用程序。

Intent i = new Intent(this, Launcher.class);
startActivity(i);

问题是我需要控制这个作为库添加的应用程序。 我需要禁用和启用只有在我引用了我开始的活动时才能完成的功能。

还有一件事,我想在主应用程序中创建一个菜单来控制库之一。因此,我不想在创建信息后立即传递信息,而是在用户单击不同选项时进行更改。

基本上我有应用程序 A 和应用程序 B,它们作为库集成在 A 上。 正常启动后,我想从应用程序A的菜单中控制应用程序B。让我们说一个 A 中的菜单,其中包含关于 B 的不同选项。这就是我想要参考的原因。

我的第一个问题是,是否可以获得我从意图开始的活动的参考?

如果不可能,根据您的经验,实现这一目标的最佳方法是什么,请记住,我无法开始在 onCreate 上实现方法。该应用程序具有清晰的流程,类到类,并且非常大。

【问题讨论】:

  • iirc 您可以执行以下操作:Intent callingIntent = getIntent() 在您打开的活动(活动 B)中,您可以运行类似 String activityName = callingIntent.getSimpleClassName() 的内容以获取打开的活动的类名(活动 A)活动B
  • @Razgriz 是的,但这对我有什么好处?我想引用 Activity B 是由 Activity A 打开的。我想控制的是 Activity B,从应用程序 A 让我们说。
  • 编辑问题以使其更清晰
  • 您是否检查过以下内容:stackoverflow.com/questions/19026515/… ?
  • @RanyAlbegWein 我刚刚做了,问题是我不希望从 A 引用 B。我想要为 B 引用 A。

标签: android android-studio android-intent android-library


【解决方案1】:

是否可以获得我从意图开始的活动的参考?

不是真的。

所以我不想在创建信息后立即传递信息,而是在用户单击不同选项时进行更改。

嗯,第二个活动要么存在,要么不存在。通常,当用户处于您的第一个活动(带有菜单的活动)中时,它不会。在这种情况下,您别无选择,只能让第一个活动通过 Intent extras 告诉第二个活动要做什么,并让第二个活动解释这些额外内容。

如果第二个活动已经存在 - 并且您以某种方式确定它已经存在 - 欢迎您使用事件总线之类的东西让第一个活动发送由第二个活动接收的消息。

在任何一种情况下,您都需要修改第二个活动,或子类化第二个活动,以处理此活动间消息传递。

【讨论】:

  • 我认为它存在,因为第二个活动是启动器。我希望第一个活动通过第二个已经实现的功能来控制第二个。
  • +1 作为答案,至少现在我确认了引用那个的想法是不可能的。
  • @Lind:“我认为它存在,因为第二个活动是启动器”——可能存在。 instance 不会,直到某处调用startActivity() 来导致实例出现。现在,如果您的第二个活动是直接启动的,然后通过某种形式的导航用户到达您的第一个活动,那么可能存在第二个活动类的实例。但是,如果用户通过不同的启动器启动您的应用程序(例如,直接进入第一个活动),那么第二个活动的实例将不存在。
  • 我同意,我明白你在说什么。但基本上我认为这是不可能的,我目前正在从应用程序 A 的主要活动的 onCreate 调用启动器的 startActivity()。
  • @Lind:除了我已经写的内容之外,我没有更多的 cmets。一般来说,如果你想整合两个东西,你需要愿意改变整合的双方。
猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 2016-06-30
  • 2023-04-03
  • 1970-01-01
  • 2014-10-22
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多