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

Android 对相同活动中变量的静态引用,android,android-activity,static,Android,Android Activity,Static,我有一个活动,主要由一个viewpager组成。用户可以以不同的意图打开该活动的新版本,从而使viewpagers中的数据有所不同。问题是,当我从主活动类型访问其他类中的静态变量时,它似乎在编辑活动的所有打开版本中的变量值。如果我完成()顶部活动,则原始活动中的数据已更改为子活动的数据。只有当前活动才保留对静态变量的引用的方法是什么 谢谢 只有当前活动才保留对静态变量的引用的方法是什么 很简单,你不能 在Java中,当您在类的主体中将变量声明为static时,它是一个“类变量”。这意味着该类的所

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

谢谢

只有当前活动才保留对静态变量的引用的方法是什么

很简单,你不能

在Java中,当您在类的主体中将变量声明为
static
时,它是一个“类变量”。这意味着该类的所有实例之间只共享一个变量。因此(正如您已经发现的)更改类的任何实例中的值将更改所有实例的值,因为变量只有一个“副本”

Android的一条金科玉律是永远不要在活动中使用
静态
变量或方法

这有两个原因-如果您的
活动
仅在您的ouwn代码中扩展,那么使用
静态
变量或方法是毫无意义的,并且(正如您所发现的那样),它会适得其反

第二个原因是,
静态
通常与
公共
修饰符一起使用,以便允许“所有区域”访问变量和/或方法,而不管是否存在任何给定类的实际实例-如果类是
活动
,由于活动的生命周期,这是一个非常危险的游戏

如果您有一个“基本”
活动
,您想启动它的各种实例,但需要一个它们都需要访问的公共变量,那么只需将其声明为

protected Object myVariable;
…用所需的任何类型的变量替换
对象

每个
活动
将获得自己的
myVariable
实例,并且可以更改其值,而不会影响同一
活动
类的任何其他实例


请参见以下内容,以获得非常详尽的答案,谢谢!我现在明白了为什么这是一种非常糟糕的方法,我将更改我的代码。protected允许我以静态方式访问变量吗?如果没有,您将如何访问变量?
protected
允许任何扩展“基本”
活动的类继承该变量,并以任何需要的方式使用它。它不允许任何其他类从外部访问它。这就是我所说的不要将
活动中的变量或方法声明为
public
public static
。如果要与外部类共享数据,请使用“helper”类或类似的
SharedReferences
。然后我将使用helper类。谢谢