我已经看到过这一千次以千种方式问过,但仍然无法让它发挥作用......
我创建了一个我从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”的几个变种无济于事。
这应该相当简单 - 任何想法??
答案 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已经发布了内部类的第一个变体的样子。