使用的Android应用程序对象 “无法解析法” 的错误

问题描述:

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

我不能完全理解你的代码。但是按照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。 –