2012-08-06 125 views
0

我有兩個名爲Activity_AActivity_B的活動。我喜歡在Activity_A方法或函數:從其他活動調用函數時發生ClassCastException

public void printNumber (int i) { 
    for(int j = 0; j <= i; j++) { 
     Log.w("TAG", "Print number is: " + j); 
    } 
} 

現在我想從我的叫Activity_B另一個活動調用此方法。

我嘗試使用以下行來調用這個方法:

((Activity_A) this.getApplicationContext()).printNumber(); 

我寫Activity_B的的onCreate這條線,這將崩潰我的應用程序和logcat中顯示了這個錯誤:

java.lang.ClassCastException: android.app.Application cannot be cast to com.example.app.Activity_A 

如何我可以這樣做嗎?

編輯:我發現this問題acording到 「富」 延伸到Activity_AActivity_B。但問題是Activity_B是一個列表活動,我已經將其擴展爲ListActivity

等答案創建Activity_A的實例,然後調用方法。如果我這樣做,所有變量將變爲空或爲空Activity_A。我不想做一個靜態方法。

有沒有其他的方式來做到這一點,而無需創建一個靜態引用或另一個實例?

+0

你正在嘗試做的,是可能是錯誤的。你或者想要其他的工具類來調用這個方法,或者更好的架構。 – 2012-08-06 09:42:04

回答

1

getApplicationContext將爲您提供一類Application not Activity類型。所以這不會工作,你將不得不存儲一個靜態的活動環境,然後調用這個方法。如果你發佈你正在做的事情的細節,那麼有人會建議解決方案

+0

感謝您的回答。這將工作。 – Pari 2012-08-06 10:23:06

0

我假設你的Activity_A派生自Activity而不是來自Application。 getApplicationcontext()返回應用程序,而不是活動。

如果您想從任何活動中使用您的printNumber(),請將其放入應用程序或服務中。

0

應用程序上下文是比任何一個活動都更高級別的構造。

活動A不活動B的父

活動之間

「直接」通信只能通過

從A來實現,僅經由通過 startActivity或startActvityForResult

燒製的Intent B

B只能通過與startActivityForResult進行通話才能與A通信,然後被回覆

在活動A 公共無效onActivityResult(INT requestCode,INT resultCode爲,意圖數據)

和活動B,具有通話結束對

http://developer.android.com/reference/android/app/Activity.html#setResult(int