【问题标题】:Access a method of the immediate activity in the back-stack访问返回栈中立即活动的方法
【发布时间】:2021-01-20 17:09:51
【问题描述】:

所以场景非常简单。 我有两个活动,A和B。 A是首页,可以从A到B。 在 Activity A 中有一个名为 setupDetails() 的私有方法来更新缓存的用户信息。 因此,在活动 B 中,当操作完成时,我想调用活动 A(又名父活动)的 setupDetails() 方法。有可能这样做吗?不,我不是在谈论 onActivityResults() 或广播监听器。我想直接从活动 B 访问该方法。我尝试搜索类似的问题,但找不到合适的答案,因此在此处发布。

【问题讨论】:

  • backstack 中的所有活动都应该被视为不存在,因为它们可能会在没有警告的情况下被系统销毁。因此,您应该避免访问未恢复的活动。
  • 我明白了,谢谢 :)

标签: java android android-studio android-activity


【解决方案1】:

你可以这样做,但它有点 hacky。

ActivityA 中,创建public static 类型为ActivityA 的变量,如下所示:

public static ActivityA instance;

ActivityA 启动ActivityB 之前,它可以在变量中存储对自身的引用(即:instance = this)。

ActivityB中,当你想调用ActivityA中的方法时,只需调用public static变量上的方法即可,即:

ActivityA.instance.setupDetails();

这应该大部分工作,但在某些情况下它不会工作。例如,如果您启动了ActivityB,然后应用程序进入后台。在一段时间不活动后,Android 将终止托管应用程序的操作系统进程。当用户返回应用程序时,Android 将为应用程序创建一个新的操作系统进程并仅实例化ActivityB。在这种情况下,没有ActivityA 的实例,所以变量ActivityA.instance 将是null。为了防止 NPE,您可以检查这种情况。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2014-02-22
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多