Android:使用相同的类在堆栈中启动不同的活动

时间:2011-03-02 13:11:42

标签: android android-activity android-intent

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

我需要创建一堆活动,所有活动都是通过使用同一个类创建的:它是一个定义新闻列表的类,只需要有多个子活动,这些活动也是新闻列表,但来自不同的类别。 (我确实需要在堆栈中进行这些活动)

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

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

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

还有其他想法吗?

2 个答案:

答案 0 :(得分:0)

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

如何通过使用共享首选项来改变其他屏幕上的数据。您可以在那里存储所需的任何数据,然后(通过您的活动组)更改屏幕时,数据将被刷新。这比每次重新启动意图更快,更有效。

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

您可以抓住要更改数据的类的相应实例,然后只需更改它。

这有什么意义吗?

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

答案 1 :(得分:0)

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

intent.putExtra("category", categoryId);

这样你就不会管理太多的全球状态。

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

这有一些好处:

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

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