我一直在使用android.app.Application的子类来存储在我的Android应用程序中跨活动所需的全局变量,如Soonil(在如何在Android中声明全局变量?中所述)所解释的那样。
这种方法看起来像这样:
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
到目前为止,这种方法已经很好地用于从任何一个活动中访问全局变量。但今天使用同样的方法时,我遇到了以下错误:
Cannot make a static reference to the non-static method getApplicationContext()
from the type ContextWrapper
与以往不同的关键是,新的Activity实际上是一个Fragment(确切地说是SherlockFragmentActivity)。
是否有任何想法为什么我不能像以前那样访问appState,并且有没有好的解决方法?
非常感谢。
编辑:Matt B.发现了一个问题。事实证明我实际上是在另一个类中调用getApplicationContext()。以下是调用点:
public class MyActivity extends SherlockFragmentActivity {
public static class AccountListFragment extends SherlockListFragment {
MyApp appState = ((MyApp)getApplicationContext());
...
}
...
}
另外,正如下面所指出的那样,在我将调用更改为以下内容时,错误消失了
MyApp appState = ((MyApp)getActivity().getApplicationContext());
Application appState = ((Application)getApplicationContext());
,它编译得很好。 - Austyn Mahoney