Android 在子类中使用FindViewById时为Null

Android 在子类中使用FindViewById时为Null,android,class,Android,Class,我正在使用一个子类,它从main扩展到设置一些按钮。我能够更改main中创建的变量,例如来自child的TotalMoney 问题是findViewById给出了nullpointer异常。buildThemes()中的代码在主类中使用时可以正常工作 我正在使用setContentView(R.layout.main);从内到内,在main中创建。子类被实例化并从主类中的OnResume调用 我是否也需要在子类中设置ContentView,或者以某种方式从主类传递ContentView pack

我正在使用一个子类,它从main扩展到设置一些按钮。我能够更改main中创建的变量,例如来自child的TotalMoney

问题是findViewById给出了nullpointer异常。buildThemes()中的代码在主类中使用时可以正常工作

我正在使用setContentView(R.layout.main);从内到内,在main中创建。子类被实例化并从主类中的OnResume调用

我是否也需要在子类中设置ContentView,或者以某种方式从主类传递ContentView

package com.chewyapps.markettrader;

         class child extends main {

     void buildthem(){

         TotalMoney = TotalMoney + 9999;


          Button MenuButton = (Button) findViewById(R.id.Menu);
           //etc

     }
}
我无法在Oncreate中找到dviewbyd,因为完整的代码将使用

         for(i=0; i<buttonIDs.length; i++) {                
                    Button b = (Button) findViewById(buttonIDs[i]);
//do other stuff    
    }
为什么不说这句话:

Button MenuButton = (Button) findViewById(R.id.Menu);
onCreate()
中,您可以将
菜单按钮
作为参数传递到
buildthemes()
中,也可以直接引用它,具体取决于您的设计

请注意,Java约定变量名以小写字母开头,所以
menuButton
不是
menuButton

编辑
那么,为什么不在
onCreate()
中创建一个
按钮
的数组,稍后您可以遍历它呢

Button myButtons[] = new Button[buttonIDs.length];
for(int i=0; i<buttonIDs.length; i++) {                
    myButtons[i] = (Button) findViewById(buttonIDs[i]);
}
按钮myButtons[]=新按钮[ButtonId.length];
对于(int i=0;i为什么不把这一行:

Button MenuButton = (Button) findViewById(R.id.Menu);
onCreate()
中,您可以将
菜单按钮
作为参数传递到
buildthemes()
中,也可以直接引用它,具体取决于您的设计

请注意,Java约定变量名以小写字母开头,所以
menuButton
不是
menuButton

编辑
那么,为什么不在
onCreate()
中创建一个
按钮
的数组,稍后您可以遍历它呢

Button myButtons[] = new Button[buttonIDs.length];
for(int i=0; i<buttonIDs.length; i++) {                
    myButtons[i] = (Button) findViewById(buttonIDs[i]);
}
按钮myButtons[]=新按钮[ButtonId.length];
对于(inti=0;i

Button MenuButton = (Button) this.findViewById(R.id.Menu);

那么:

Button MenuButton = (Button) this.findViewById(R.id.Menu);


嗯,这些似乎没有任何区别:(意思是:按钮菜单按钮=(按钮)父项。this.findviewbyd(R.id.Menu);如果我尝试eclipse显示“在作用域中无法访问main类型的封闭实例”,嗯,这些似乎没有任何区别:(意思是:按钮菜单按钮=(按钮)父项。this.findviewbyd(R.id.Menu);如果我尝试,eclipse会显示“在作用域中无法访问main类型的封闭实例”好的,谢谢,我可以这样做。我只是假设将现有代码移动到不同的应用程序中是相当容易的class@Tom汉弗莱斯-你能发布你的实际代码吗?这里有一些错误,很难从你发布的代码中解读。在你活动的子类中调用findViewById应该可以正常工作。这是acting就像你在视图未膨胀或上下文错误的情况下调用findViewById一样。我怀疑你在onResume中关于这一情况的注释可能是关键。@slund谢谢,我所读的我认为一定是这样的。不确定要发布的代码中最相关的是什么。我编辑了原始帖子,可能会澄清我的想法oing…@Tom humphries如果
child
extends
main
main
extends
Activity
,那么你就不能这样做。永远不要实例化一个扩展
Activity
的类@Tom humphries如果你所做的只是设置一些按钮,我不确定你为什么需要扩展
Activity
。只需c在
Util
类中创建一个
static
方法,并传入按钮数组以及执行设置所需的任何其他对象。好的,谢谢,我可以这样做。我只是认为将现有代码移动到不同的class@Tom汉弗莱斯-你能发布你的实际代码吗?此处出现了一些问题,很难从您发布的代码中解读。在活动的子类中调用findViewById应该可以正常工作。这就像在视图未膨胀或上下文错误的情况下调用findViewById一样。我怀疑您在onResume中关于此情况的注释可能是关键。@slund谢谢,什么我读过我想一定是这样的。不确定要发布的代码中最相关的是什么。我编辑了原始的帖子,可能会澄清我在做什么…@Tom humphries如果
child
extends
main
main
extends
Activity
,那么你就不能这样做。永远不要实例化一个扩展
活动
@Tom humphries如果您所做的只是设置一些按钮,我不确定您为什么需要扩展
活动
。只需在
Util
类中创建一个
静态
方法,并将按钮数组以及执行设置所需的任何其他对象传递进来。