Java 当我使用findviewbyd时,将R.id.[value]中的int作为类构造函数参数传递会产生一个NPE
当我简单地尝试创建一个按钮处理类,为遇到问题的每个按钮实现onTouch和onClick事件时。以下组合有效(ButtonClick是我的类): 然而,下面给了我一个NPEJava 当我使用findviewbyd时,将R.id.[value]中的int作为类构造函数参数传递会产生一个NPE,java,android,constructor,nullpointerexception,r.java-file,Java,Android,Constructor,Nullpointerexception,R.java File,当我简单地尝试创建一个按钮处理类,为遇到问题的每个按钮实现onTouch和onClick事件时。以下组合有效(ButtonClick是我的类): 然而,下面给了我一个NPE /*Constructor*/ public ButtonClick(int buttonId, int clickType){ if(clickType == 0){ findViewById(buttonId).setOnClickListener(this); } else{
/*Constructor*/
public ButtonClick(int buttonId, int clickType){
if(clickType == 0){
findViewById(buttonId).setOnClickListener(this);
}
else{
findViewById(buttonId).setOnTouchListener(this);
}
}
/*Call from Main.java*/
ButtonClick button = new ButtonClick(R.id.button, 1);
为什么不能将R配置文件中的整数值作为参数传递,而不返回NPE,至少在这种情况下是这样?问题在于不是id,而是findViewById()
在调用此方法之前,“布局”应该“膨胀”。例如,将布局XML文件实例化为其相应的视图对象。在活动中,通常
setContentView()
执行此任务。否则,我们可以出于同样的目的使用LayoutInflater
。重要的一点是,我们得到的充气器实例连接到当前上下文。因此,在另一个上下文中,我们会得到空视图。单击
按钮扩展什么类?findViewById
是活动的一种方法,它在调用setContentView
并在xml布局中传递后使用其id查找视图。发布你的整个按钮单击类和调用此方法并创建NPE的类…@StevenByle我想从你的回答中我理解了这个问题。虽然我在扩展活动,但并没有实现onCreate(因此也没有实现setContentView)。因为我不想做这些,所以我只想通过视图。反应很好。
/*Constructor*/
public ButtonClick(int buttonId, int clickType){
if(clickType == 0){
findViewById(buttonId).setOnClickListener(this);
}
else{
findViewById(buttonId).setOnTouchListener(this);
}
}
/*Call from Main.java*/
ButtonClick button = new ButtonClick(R.id.button, 1);