2016-02-12 33 views
0

MainActitity凡在onCreate使用的Android應用程序對象 「無法解析法」 的錯誤

BLEApplication mApp = (BLEApplication) BLEApplication.mAppContext(); 
     mApp.MainActivity = this; 

而且在MainActitity

public void EnableDisableButtons(){ 
      findViewById(R.id.buttonNewGame).setEnabled(true); 
    } 

類:

public class BLEApplication extends Application { 
static Activity MainActivity; 

... }

public class BLE { 
... 

BLEApplication mApp = (BLEApplication) BLEApplication.mAppContext();   
mApp.MainActivity.EnableDisableButtons(); 
     mApp.MainActivity.findViewById(R.id.buttonContinueGame).setEnabled(true); 

我可以用MainActivity.findViewById,以便從BLE類但EnableDisableButtons()工作室活動按鈕說:「不能解析的方法」。我可以將所有代碼從EnableDisableButtons複製到BLE,但使用方法MainActivity接縫給我更優雅的解決方案。爲什麼會出現錯誤?

+0

EnableDisableButtons也不是一成不變的方法,你不能與類名 –

+0

什麼是你的事件試圖做訪問呢?請閱讀一些android教程,並重新開始。 – iZBasit

回答

1

我不能完全理解你的代碼。但是按照java的概念,你需要強制轉換活動你的活動是這樣的:

public class BLE { 
... 

BLEApplication mApp = (BLEApplication) BLEApplication.mAppContext();   
((MainActivity)(mApp.MainActivity)).EnableDisableButtons(); 
     mApp.MainActivity.findViewById(R.id.buttonContinueGame).setEnabled(true); 

由於您的mApp.MainActivity是活動的對象,所以你需要強制轉換它告訴它是一個活動,所以它可以找到您在活動中聲明的方法。

此外mApp.MainActivity給你Activity類的對象在其中沒有EnableDisableButtons()方法,因此該誤差是存在的。 現在,如果您將它轉換爲MainActivity,它會發現該方法,並且不會出現此錯誤。

+0

它有幫助!而不是'BLEApplication'中的'靜態MainActivity MainActivity;'。非常感謝!不完全理解爲什麼'findviewbyid'適用於更廣泛的'Activity'對象。 –

+0

我現在明白了 - R.id.buttonContinueGame是獨一無二的,由Damanpreet Singh寫的 - 活動不是。 –

+0

沒有原因是在onCreate中完成setcontentView。 findViewbyid是Activity.java的方法。當您在MainActivity中執行setcontentView時,因爲它從Activity.java繼承,因此會調用Activity.java的setContentView,並設置該窗口的視圖。 現在,如果你這樣做findViewById那也是Activity.java的方法,它會找到你的setContentView設置視圖,並會給你的ID的視圖。 這就是爲什麼你不能在你的xml中擁有兩個相同id的視圖的原因。而你可以在兩個不同的xml中擁有相同的視圖id。 –

相關問題