2013-02-19 45 views
2

我已經在mainactivity中定義了一個函數,現在我想用我app.App中的另一個類訪問我通過使用該對象創建了一個mainactivity對象,我稱之爲函數。它沒有顯示任何錯誤,但它沒有執行每個當我嘗試執行應用程序崩潰? 任何解決方案我可以在其他課程中創建活動的對象嗎?

+1

你剛剛通過活動類的上下文.... – duggu 2013-02-19 11:13:22

+0

你需要通過上下文,你可以使用getApplicationContext() – Dilip 2013-02-19 11:13:51

+0

嘗試下面的鏈接,並希望使用完整給你: - duggu 2013-02-19 11:14:39

回答

31

活動A應該有一個可變

static ActivityA activityA; 

在的onCreate狀態:

activityA = this; 

並添加此方法:

public static ActivityA getInstance(){ 
    return activityA; 
} 

在活動B,調用

ActivityA.getInstance().myFunction(); //call myFunction using activityA 
+0

+1回答...這是我與Raghav Sood討論過的答案belwo他的評論 – Pragnani 2013-02-19 11:47:04

+2

是的,只有當頂級活動應該控制下面的活動時才需要。例如可以使用透明的活動作爲圖形界面來控制它下面的活動。否則,最好是該函數在單獨的實用程序類中是靜態函數,並在需要時傳遞上下文。 – Lumis 2013-02-19 12:06:57

+0

其調用的方法,但不能更改imageView的setbackgroundresources().... .... – 2014-09-30 06:28:09

13

你不能只是創建活動的對象使用:

MyActivity activity = new MyActivity(); 
,你會與正常的Java類

。 Android中的所有活動必須經歷活動生命週期,以便它們具有附加的有效上下文。

通過將Activity作爲普通的Java類處理,您最終會得到一個null上下文。由於Activity中的大多數方法都是在Context上調用的,所以會得到一個空指針異常,這就是爲什麼你的應用程序崩潰的原因。

而是將所有需要從其他類中調用的方法移到一個Utility類中,該類在其構造函數中接受有效的上下文,然後在方法中使用該上下文來完成工作。

+0

我知道如何使用泛型util類訪問常用方法......但是如何在活動中使用靜態方法並使用類名來調用它...?這是錯的嗎?如果我們這樣做會發生什麼...... – Pragnani 2013-02-19 11:22:17

+1

@Pragnani靜態方法不能引用類的非靜態成員。由於類上下文不是靜態的,所以仍然會出現錯誤。 – 2013-02-19 11:23:07

+0

,是啊我知道..但是我們如何訪問Calender類的靜態方法,即我們的非靜態類中的Calender.getInstance()..第七個是工廠方法,但它是靜態的 – Pragnani 2013-02-19 11:27:40

相關問題