2013-07-19 95 views
3

我有一個非活動類需要啓動一項新活動。現在,我只是將當前上下文作爲參數傳遞,但如果可能,我想靜態訪問上下文。我已經嘗試過創建一個新的應用程序(MyApplication extends Application),它既是一個新的應用程序,也是一個主應用程序,它們都不起作用。有什麼建議麼?如何獲取非活動類的當前活動上下文,靜態

目前代碼:

public class SharedFunctions { 
    public static void doSomething(Context context){ 
     Intent i = new Intent(context, NextActivity.class); 
     context.startActivity(i); 
    } 
} 
+0

通過上下文的SharedFunctions類的構造函數,那麼您可以在您所有的methodes使用它 – Houcine

+0

我從來沒有實例化類,因爲所有的方法都是靜態的 – lcta0717

+0

在這種情況下,您需要將上下文作爲參數傳遞給您的類的每個方法(如果此方法需要上下文變量) – Houcine

回答

1

創建這個類:

public class MyApplication 
    extends Application 
{ 
    private static Context context; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 

    public static Context getContext() 
    { 
     return context; 
    } 
} 

後,必須在應用這個類添加到字段名(艙單)

<application 
    android:name="yourPackageName.MyApplication" 
    ........ 
</application > 

結果您可以在應用程序的任何位置調用MyApplication.getContext()並獲取上下文。

希望我幫你。

+0

我已經試過並且它不工作 – lcta0717

+0

hm ..如果此代碼沒有工作...然後我沒有更多的想法..對不起。 –

2

更簡單的方法是將上下文傳遞給每個方法。這是更多的打字,但它有助於確保你沒有泄漏參考。

當然,如果你真的需要靜態引用,你可以在你的SharedFunctions類中保留一個靜態成員,併爲每個Activity設置它。

onResume()onPause()可能是設置/清除它的好地方,但根據您的需要,您可能需要更改它。只是儘量不要保留對舊活動的引用。

public class SharedFunctions{ 
    private static Context context; 

    public static void setContext(Context ctx){ 
     context = ctx; 
    } 

    public static void doSomething(){ 
     context.someContextFunction(); 
    } 

} 

在每一個活動:

protected void onResume(){ 
    SharedFunctions.setContext(this); 
} 

protected void onPause(){ 
    SharedFunctions.setContext(null); 
} 
相關問題