2

当我只是尝试创建一个为每个按钮实现 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,至少在这种情况下是这样?

4

1 回答 1

0

问题不在于 id,而在于findViewById()
在调用此方法之前,“布局”应该是“膨胀的”。即,将布局 XML 文件实例化为其对应的 View 对象。在一个 Activity 中,通常setContentView()做这个工作。否则我们可以LayoutInflater用于相同的目的。
重要的一点是,我们得到的 inflater 实例与当前上下文相关联。因此,在另一个上下文中,我们得到空视图。

于 2013-11-24T19:06:44.627 回答