当我只是尝试创建一个按钮处理类来实现每个按钮的onTouch和onClick事件时,我遇到了一个问题。以下组合有效(ButtonClick是我的类):
/*Constructor*/
public ButtonClick(View v, int clickType){
if(clickType == 0){
v.setOnClickListener(this);
}
else{
v.setOnTouchListener(this);
}
}
/*Call from Main.java*/
ButtonClick button = new ButtonClick(findViewById(R.id.button, 1);
但是,以下给我一个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,至少在这种情况下?
答案 0 :(得分:0)
问题是没有id ,但是 findViewById()。
在调用此方法之前,'layout'应该'膨胀'。即,将布局XML文件实例化为其对应的View对象。在活动内部,通常setContentView()
完成这项工作。否则我们可以将LayoutInflater
用于相同的目的。
重要的是,我们获得的inflater实例与当前上下文相关联。因此,在另一个上下文中,我们得到null视图。