2011-04-17 67 views
2

我有一個按鈕。它的View.OnClickHandler實現類實例化了大約3個構造函數,它們來自對android.app.Activity對象最近的引用。點擊後,我希望它打開位置設置面板,以便用戶可以通過啓動Settings.ACTION_LOCATION_SOURCE_SETTINGS意圖來啓用GPS和/或基於網絡的位置。「靜態」startActivity(意圖)方法?

將父Activity對象從構造函數傳遞給構造函數給構造函數,因此我的onClick()方法可以看到它,有什麼辦法可以進入隱喻靜態以太和尖叫:「嘿,Android ...啓動Settings.ACTION_LOCATION_SOURCE_SETTINGS「,而不必有一個實際的活動對象方便地用於它的startActivity方法?

回答

3

我相信你是說你需要一個Activity對象的第一個參數new Intent或其他一些方法來生成意圖。如果我錯了,請糾正我。如果是這種情況,您實際上只需要一個Context對象(ActivityContext的子類),但在此情況下可能無助於此。

我需要看看代碼,以確保沒有辦法從你需要的地方整齊地獲取上下文對象。可能有一些方法可以做到這一點(例如,從匿名對象作用域訪問外部變量; Android上具有處理程序的相當常見的模式)。

我會說,在我的一些應用程序中,我確實傳遞了相當多的上下文對象。我個人認爲這種做法(稱爲依賴注入)並不像一些工程師想的那麼糟糕。如果你在應用程序中使用經理或者國家負擔得起的對象,用全局訪問器或者自動依賴注入來隱藏這個事實,那麼就是在對這個事實進行描述。

下面是有關這個主題的其他兩個類似的問題,相對於Android的上下文對象:

Static way to get 'Context' on Android?

Using Application context everywhere?

+1

OK,我能夠使用尖端處的「靜態的方式來獲得在Android上下文」你列出這樣做的問題。我在清單中命名了Application類,然後在Application類的onCreate()方法中設置靜態Context對象的值。 – Bitbang3r 2011-04-17 15:39:27

0

使用YourActivity.this作爲背景,而不是this如果你在同一個班是。

10

這爲我工作:

public class StartGame extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.start_game_activity); 
    } 

    public static void nextPass(Activity context) { 
     Intent intent = new Intent(context,your.class); 
     context.startActivity(intent); 
    } 

}