从我的Activity类访问变量

时间:2013-02-27 19:19:03

标签: android variables global-variables applicationcontext

我在我的Application类中创建了一些getter setter:

public class myApp extends Application{

//"Global" variables

private Boolean musicEnabled = true;        //Music on or off?
private Boolean soundEnabled = true;        //Sound effects on or off?

@Override
public void onCreate() {
    // TODO Auto-generated method stub

    musicEnabled = true;            //Default value for music
    soundEnabled = true;            //Default value for sound effects

    super.onCreate();
}

//Getter and setter for musicEnabled

public Boolean getMusicOption(){
    return musicEnabled;                    //Getter


}
public void setMusicOption(Boolean value){  //Setter

    musicEnabled = value;

    }

//Getter and setter for soundEnabled

public Boolean getSoundOption(){            
    return soundEnabled;
}

public void setMusicOptions(Boolean value){
    soundEnabled = value;             
}

}

然后我在Activity类中获取值:

myApp myAppSettings = (myApp)getApplicationContext();   
musicEnabled = myAppSettings.getMusicOption();
soundEnabled = myAppSettings.getSoundOption();

这很好,但我无法弄清楚我是如何找到它们并从相应的surfaceView类中使用它们的?即开始的课程:

public class mySView extends SurfaceView implements
  SurfaceHolder.Callback {

到目前为止,我设法做到这一点的唯一方法是通过创建一个方法将它们传递到我的surfaceview类:

public void initialise(Boolean Sound, Boolean Music){

}

然后从我的Activity类传递这些内容,如下所示:

myView.initialise(musicEnabled, soundEnabled).

这很有效,但是看起来有点乱,我的意思是我需要使用我的'myView'类中的setter来设置这些值所以........无论如何我可以访问它们直接来自我的'myView'类,还是我必须从Activity类中执行此操作?

全部谢谢

3 个答案:

答案 0 :(得分:1)

您应该可以从自定义getContext().getApplicationContext()内部调用SurfaceView,并像上面的示例中那样对其进行类型转换。请参阅View.getContext()

答案 1 :(得分:1)

您可以创建一些方法,例如init()并从mySView的所有构造函数中调用它。

在init方法中,您可以执行相同操作,如在Activity:

private void init() {
    myApp myAppSettings = (myApp)getContext().getApplicationContext();   
    musicEnabled = myAppSettings.getMusicOption();
    soundEnabled = myAppSettings.getSoundOption();
}

答案 2 :(得分:0)

另一种选择是将您的设置保存在 SharedPreferences 中,可以在应用中的任何位置访问上下文。 这样,上次使用应用程序时的任何更改都将自动保留,因为可以在下次启动时加载,而不必在每次启动时将值恢复为默认值。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);