对相同活动中变量的静态引用

Static Reference to Variables in Identical Activities

我有一个主要由 viewpager 组成的 activity。用户可以用不同的意图打开 activity 的新版本,从而使 viewpager 中的数据不同。问题是当我从主要 activity 类型访问其他 类 中的静态变量时,它似乎正在编辑 activity 的所有打开版本中的变量值。如果我 finish() 顶部 activity,原始 activity 中的数据已更改为子 activity 中的数据。仅使用当前 activity 保留对静态变量的引用的方法是什么?

谢谢!

What is a way to keep references to static variables with only the current activity?

很简单 - 你不能。

在Java中当你在class的主体中声明一个变量为static时,它是一个'class variable'。这意味着 class 的所有实例之间只共享一个变量。因此(正如您已经发现的那样)更改 class 的任何实例中的值都会更改所有实例的值,因为只有一个 'copy' 变量。

Android 中的一条黄金法则是从不 在活动中使用static 变量或方法。

这有两个原因 - 如果您的 Activity 仅在您自己的代码中扩展,那么拥有 static 变量或方法是没有意义的,并且(如您所见),适得其反。

第二个原因是 static 通常与 public 修饰符一起使用,以允许 'all-areas' 访问变量 and/or 方法,而不管实际是否任何给定 class 的实例是否存在 - 在 class 是 Activity 的情况下,这是一个 非常 危险的游戏,因为活动的生命周期。

如果你有一个 'base' Activity,你想启动它的各种实例,但想要一个它们都需要访问的公共变量,那么只需将其声明为...

protected Object myVariable;

...用您想要的任何类型的变量替换 Object

每个 Activity 都会获得自己的 myVariable 实例,并且可以更改其值而不影响相同 Activity class.[=25= 的任何其他实例]

Java Class Variables

见下文