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