0

我正在尝试设置一个按钮,单击该按钮后,将调用我创建的 View 子类中的函数。但是,即使我完全按照帮助页面上的内容遵循 Android 文档,我仍然会收到错误消息。

这是我的主要活动:

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

这是包含我尝试访问的函数的类,以及尝试将布局中的按钮与我尝试运行的函数关联的代码段(它清除列表):

public class Drawing extends View implements OnTouchListener{

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

Button resetButton = (Button)findViewById(R.id.button2);
resetButton.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        eraseLines();
    }
});


public Drawing(Context context, AttributeSet xmlAttributes){
    super(context, xmlAttributes);
    setOnTouchListener(this);   
}


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

我做错了什么让我无法简单地让按钮在绘图类中运行 eraseLines() 函数?

非常感谢任何帮助!

4

1 回答 1

0

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

你应该做 :

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
  }
}
于 2013-06-13T08:41:04.757 回答