2013-02-27 49 views
0

我已经创造了一些的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){ 

} 

然后在这些合格从我的活动类,像这样:

myView.initialise(musicEnabled, soundEnabled). 

这工作,但它似乎有点乱,我的意思是我会需要使用制定者从我的“MyView的”类来设置这些值,所以.... ....有没有啊我可以直接从我的'myView'类访问它们,还是必须从Activity类执行此操作?

感谢所有

+0

在我看来,传递给构造函数和类方法的参数比你的方法少得多。当不依靠意大利面代码访问随机全局变量时,易于维护,可扩展性和重用性要好得多。 – Simon 2013-02-27 19:27:06

+0

由于它们是简单的布尔值,为什么不使用SharedPreferences而不是整个Application类呢? – 2013-02-27 19:28:57

+0

@Simon,就这样我很清楚,你是说只是将我的应用程序类中的变量/值传递给我的surfaceview类,就像我已经在做的那样(但是废除应用程序类)?谢谢。 – Zippy 2013-02-27 22:59:12

回答

1

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

在init()方法,你可以做同样的,作为活动:

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

真棒,这就是我正在寻找:-) – Zippy 2013-02-27 19:34:32

1

你应该只能够调用getContext().getApplicationContext()从您的自定义SurfaceView里面,就像您在上面的例子中强制转换它。见View.getContext()

+0

谢谢@wsanville,这工作完美 – Zippy 2013-02-27 19:35:10

0

另一种选择是保存在SharedPreferences这是accessable在App的任何地方,你有设置上下文。 通过这种方式,上次使用应用程序的任何更改都会自动保留,因为可以在下次启动时加载,而无需在每次启动时将值返回到默认值。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
+0

谢谢,这是我没有考虑过的 - 我会研究它! – Zippy 2013-02-27 19:35:56