我有一个主要由viewpager组成的活动。用户可以使用不同的意图打开该活动的新版本,从而使视图页中的数据不同。问题是当我从主要活动类型访问其他类中的静态变量时,似乎它正在编辑活动的所有打开版本中的变量值。如果我完成()顶级活动,则原始活动中的数据已更改为子活动的数据。有什么方法可以仅使用当前活动来保持对静态变量的引用?
谢谢!
答案 0 :(得分:0)
有什么方法可以仅使用当前活动来保持对静态变量的引用?
很简单 - 你不能。
在Java中,当您在类的主体中将变量声明为static
时,它是一个'类变量'。这意味着该类的所有实例只在它们之间共享一个变量。因此(正如您已经发现的那样)更改类的任何实例中的值将更改所有实例的值,因为只有一个副本'变量。
Android中的一条黄金法则是从不在活动中使用static
变量或方法。
这有两个原因 - 如果您的Activity
仅在您的ouwn代码中进行了扩展,那么使用static
变量或方法是毫无意义的(正如您已经发现的那样),它适得其反。
第二个原因是static
通常与public
修饰符一起使用,以便允许所有区域'访问变量和/或方法,无论是否存在任何给定类的实际实例 - 在类为Activity
的情况下,这是一个非常危险的游戏因为活动的生命周期。
如果你有一个'基地' Activity
你想要启动各种实例,但想要一个他们都需要访问的公共变量,然后简单地将其声明为......
protected Object myVariable;
...用你想要的任何类型的变量替换Object
。
每个Activity
都会获得myVariable
的自己的实例,并且可以在不影响同一Activity
类的任何其他实例的情况下更改其值。
请参阅以下Java Class Variables