Java 使用onClickListener实际声明单击事件时出错

Java 使用onClickListener实际声明单击事件时出错,java,android,onclicklistener,Java,Android,Onclicklistener,我试图设置一个按钮,单击该按钮后,调用我创建的视图子类中的函数。但是,即使我完全按照帮助页面上写的Android文档进行操作,我还是会不断收到一个错误 以下是我的主要活动: public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentVi

我试图设置一个按钮,单击该按钮后,调用我创建的视图子类中的函数。但是,即使我完全按照帮助页面上写的Android文档进行操作,我还是会不断收到一个错误

以下是我的主要活动:

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
下面是包含我试图访问的函数的类,以及试图将布局中的按钮绑定到我试图运行的函数的代码段(它清除了一个列表):

public类图形扩展视图实现OnTouchListener{
私有ArrayList行=新建ArrayList();
按钮重置按钮=(按钮)findViewById(R.id.button2);
resetButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
删除行();
}
});
公共绘图(上下文上下文、属性集和属性){
super(上下文,xmldattributes);
setOnTouchListener(这个);
}
公共线路{
行。清除();
}
我做错了什么,使我无法简单地让按钮在类绘图中运行橡皮擦线()函数


非常感谢您的帮助!

我的猜测是,当您检索按钮时,视图的布局没有正确膨胀,因此其引用可能为空

你应该做:

public class Drawing extends View implements OnTouchListener{{

  private ArrayList<Line> lines = new ArrayList<Line>();

  public Drawing(Context context, AttributeSet attrs) {
    super(context, attrs);

    // Inflate layout prior to retrieving the button
    LayoutInflater.from(context).inflate(R.layout.your_drawing_layout, this, true);

    // Assuming 'button2' id exists in 'your_drawing_layout'
    Button resetButton = (Button)findViewById(R.id.button2);
    resetButton.setOnClickListener(new View.OnClickListener(){
      public void onClick(View v){
          eraseLines();
      }
    });

  }

  public void eraseLines(){
    lines.clear();
  }

  @Override
  public boolean onTouch(View v, MotionEvent event){
    // Implementation of onTouch
  }
}
public类图形扩展视图实现OnTouchListener{{
私有ArrayList行=新建ArrayList();
公共绘图(上下文、属性集属性){
超级(上下文,attrs);
//在检索按钮之前,先对布局进行充气
布局。从(上下文)开始。充气(R.layout.your\u drawing\u layout,this,true);
//假设“您的图纸布局”中存在“button2”id
按钮重置按钮=(按钮)findViewById(R.id.button2);
resetButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
删除行();
}
});
}
公共线路{
行。清除();
}
@凌驾
公共布尔onTouch(视图v,运动事件){
//onTouch的实现
}
}

您可以发布日志吗?应用程序是否进入onCLick()函数?可能是错误:您实现了Ontouchlistener而不是onCLick listener?您是否在绘图类中实际实现了Ontouchlistener?您是否重写了onTouch方法(View v,MotionEvent事件)?
public class Drawing extends View implements OnTouchListener{{

  private ArrayList<Line> lines = new ArrayList<Line>();

  public Drawing(Context context, AttributeSet attrs) {
    super(context, attrs);

    // Inflate layout prior to retrieving the button
    LayoutInflater.from(context).inflate(R.layout.your_drawing_layout, this, true);

    // Assuming 'button2' id exists in 'your_drawing_layout'
    Button resetButton = (Button)findViewById(R.id.button2);
    resetButton.setOnClickListener(new View.OnClickListener(){
      public void onClick(View v){
          eraseLines();
      }
    });

  }

  public void eraseLines(){
    lines.clear();
  }

  @Override
  public boolean onTouch(View v, MotionEvent event){
    // Implementation of onTouch
  }
}