2013-02-27 87 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