【问题标题】:Android: launch different activities in a stack, using the same classAndroid:使用同一个类在堆栈中启动不同的活动
【发布时间】:2011-03-02 13:11:41
【问题描述】:

我有一个类似的问题: Android: Multiple activity instances launched by same intent. Bring one uniquely to foreground?

我需要创建一个activity栈,全部使用同一个类创建:它是一个定义新闻列表的类,只需要有多个子activity,它们也是新闻列表,但是来自不同的类别。 (我确实需要将这些活动放在一个堆栈中)

问题是我需要在每个活动显示后更改它们的数据,但我找不到单独访问每个活动的方法,因为它们都使用同一个类,所以如果我使用静态方法,我会同时更改所有这些活动的数据。理想情况下,可能有一种方法可以使用每个活动的引用,这样我就可以分别访问每个活动的方法,但我认为没有办法做到这一点。

我不妨在启动每个活动时传递参数 ID,并同时为每个活动实例化对象,然后使用这些 ID 访问相应对象的方法...

编辑澄清:让我举一个例子来说明我想要实现的目标。我有一个 A 类,我正在使用同一个类在堆栈中实例化多个活动。在创建这些活动之后,我需要静态地更改其中一个活动的数据,因此通过调用 A.alterData(); ,但不是在创建活动时,因此无法通过使用不同数据启动活动来做到这一点。由于此类有多个实例,如果我这样做,这将导致更改所有这些上的数据使用 A 类的活动。我能否以某种方式对这些对象使用对象和方法来更改使用同一类的不同活动的数据?

还有其他想法吗?

【问题讨论】:

    标签: android android-activity android-intent


    【解决方案1】:

    您可以使用 ActivityGroup。它基本上包含一个活动列表,您需要控制它们周围的导航。听起来很适合你的情况。有很多例子可以通过 google 找到。

    我将如何更改其他屏幕上的数据是使用共享首选项。您可以在其中存储您需要的任何数据,然后(通过您的活动组)当您更改屏幕时,数据会被刷新。这比每次都重新启动 Intent 更快,效率更高。

    另一种方法是在用户不注意的情况下在后台更改数据。可以这样做是因为 Activity 组会加载它所拥有的所有 Activity,并且它们始终在后台运行,除非开发人员另有说明。

    您可以抓住要更改数据的类的适当实例,然后进行更改。

    这些有意义吗?

    如果需要,我可以详细说明。

    【讨论】:

    • 这不是我一直在寻找的,我已经编辑了我的问题以澄清,请看一下
    【解决方案2】:

    我会为每个活动提供参数,例如:

    intent.putExtra("category", categoryId);

    这样您就不会管理太多的全局状态。

    关于更改数据 - 如果您正在谈论从原始来源刷新数据,那么您可能应该在 Activity 的 onResume() 方法中执行此操作。查看Activity Lifecycle

    这有几个好处:

    • 您将可以访问该活动的所有上下文
    • 您不必做一些讨厌的事情,例如访问另一个 Activity 的数据
    • 您不会浪费时间刷新用户未查看的数据

    即使您必须对数据进行更新,也有办法确保每个 Activity “专注于自己的业务”。

    【讨论】:

    • 这不是我一直在寻找的,我已经编辑了我的问题以澄清,请看一下
    • 您可能希望依赖于 Android 中的正常刷新机制:实际更改底层数据、在游标上调用 requery()、使用内容提供程序等。我只是无法想象您为什么会需要更改其他活动中的数据;他们需要更改/使用自己的数据。
    • 再说一次,这不是我想要的。我需要将同一类的多个实例创建为单独的活动,然后以某种方式将它们标识为不同的实例,以便我可以使用静态回调分别更改它们上的数据。感谢您的回复..
    • 你可能会重新考虑你在做什么。我怀疑您是否真的需要更改另一个 Activity 的数据。
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2011-03-29
    • 2016-09-30
    相关资源
    最近更新 更多