对相同活动中变量的静态引用
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= 的任何其他实例]
见下文
我有一个主要由 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= 的任何其他实例]