2012-08-15 56 views
0

在我的android項目中,我有一些活動類,也簡單的java類。它們中的一些完全獨立於術語和觀點,但在其他術語中恰好我需要它來訪問特定的背景方法。從java類訪問conttext的模式(它不是活動)

我已經讀過它,有人說他們將某些活動的上下文傳遞給需要其方法的每個類;其他人傳遞一個視圖,然後獲取上下文或本類必須擴展活動的...¬¬

但例如,我有一個類,其中它只調用一次類似情境的方法:

getSharedPreferences(configNameFile, 0); 
getString(R.string.text); 
... 

因此,我想知道你總是用什麼模式來做到這一點。

+0

我認爲Google提供了一個解決方案,我們可以獲取應用程序的全局上下文,如果我們有一個類擴展到應用程序。因此,這似乎更好:'公共類應用程序擴展應用程序{0}私有靜態SakebuApp實例; \t \t public void onCreate(){ \t \t super.onCreate(); \t \t instance = this; \t} \t \t 公共靜態上下文的getContext(){ \t \t返回instance.getApplicationContext(); \t} }' – 2012-08-16 16:48:36

回答

1

我個人最喜歡的方式來做到這一點:

依賴注入 使用RoboGuice

確保你不需要的背景下

如果可能的話,儘量避免在其他文件中使用上下文,然後使用您的活動。如果真的需要,我大部分時間都會寫封包。例如。對於設置,我編寫了一個設置界面,可以使用共享首選項進行設置。無論何時您想稍後更改設置實現,都可以通過交換界面的實現輕鬆完成。如果你真的需要它,我寧願用static Application context

+0

我喜歡這些選項,但我有疑問。如果我們理解Android的體系結構像MVC模式:'Java Class - > Model;活動 - >控制器;查看 - >查看'因此,所有不是模型的類都應該是活動,然後總是有一個上下文。但我不確定。 – 2012-08-15 18:58:57

+0

我不同意你關於'Java Class - > Model'的聲明。我想說一個Android服務應該是你的模型(因爲它對你的活動的生命週期並不緊張,在這個服務中,你將永遠有一個上下文。 – Jordi 2012-08-16 07:01:48

0

此外,你可以把這個方法接受一個Context paramerter,例如:

public void getPrefs(Context context){ 
    context.getSharedPreferences(configNameFile, 0); 
    context.getString(R.string.text); 
} 

然後在你的活動傳遞當前的情況下它:

public void getPrefs(this);