Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我使用findviewbyd时,将R.id.[value]中的int作为类构造函数参数传递会产生一个NPE_Java_Android_Constructor_Nullpointerexception_R.java File - Fatal编程技术网

Java 当我使用findviewbyd时,将R.id.[value]中的int作为类构造函数参数传递会产生一个NPE

Java 当我使用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{

当我简单地尝试创建一个按钮处理类,为遇到问题的每个按钮实现onTouch和onClick事件时。以下组合有效(ButtonClick是我的类):

然而,下面给了我一个NPE

/*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);