我在我的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类中执行此操作?
全部谢谢
答案 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);