如何在Android ImageButton派生类中覆盖onClick

时间:2011-10-21 15:58:37

标签: android

我已经看到过这一千次以千种方式问过,但仍然无法让它发挥作用......

我创建了一个我从ImageButton派生的类。我想在课堂上定义我的“点击”行为。

我知道我可以在我的Activity's onCreate中做一些事情,如:

myButton b;
b = (myButton)findViewById(R.drawable.mybutton);
b.setOnClickListener(new View.OnClickListener() {
     ...etc...

但我想在应用程序中定义代码,派生类中的

我首先想到我可以将其定义为:

 @Override public void onClick(View v) {

...但是我得到一个错误,说我不能在这里使用“@Override”因为“onClick”不在超类中。 (当试图删除“@Override”时,它只是构建并运行,但永远不会被调用)。我也试过了:

 @Override public void onClickListener(View v) {

...“实现onClickListener”和“实现OnClickListener”的几个变种无济于事。

这应该相当简单 - 任何想法??

2 个答案:

答案 0 :(得分:1)

   b.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
          derivedClassFunction(v);
      }
  });

   public void derivedClassFunction(View v) {
          /* code...*/
   }

另一种方式:

public class DerivedClass extends ImageButton implements View.OnClickListener {
    /*code...*/
    b.setOnClickListener(this);
    /*code...*/
    @Override
    public void onClick(View v) {
        /*code...*/
    }

}

答案 1 :(得分:1)

这是因为视图中实际上没有方法onClick()。该工作在onUpKey()课程的View中完成。

但是,如果您想要监听子类中的单击事件,则可以非常轻松地完成此操作。您可以创建一个实现View.OnClickLister的内部类,并使用它来监听事件甚至更简单,在类中实现接口并在构造期间将其设置为侦听器。后者将如下所示:

class YourClass extends ImageButton implements View.OnClickListener {
    public YourClass() {
        setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //Your code
    }
}

LAS_VEGAS已经发布了内部类的第一个变体的样子。