3 回答
![?](http://img1.sycdn.imooc.com/5333a0780001a6e702200220-100-100.jpg)
TA贡献1829条经验 获得超13个赞
让我们有一个界面 ElectricityBill
public interface ElectricityBill{
public void pay(int amount);
}
现在有两种方法可以支付电费,或者去附近的电力局办公室
ElectricityBill bill = new ElectricityBill(){
@Override
public void pay(int amount){
}
}
payBill(bill);
或通过在线支付账单
public class User implements ElectricityBill{
.....
@Override
public void pay(int amount){
}
}
.....
payBill(this);
}
在这两种情况下,用户都必须支付 XXX 金额,如果您想收听输入事件,您必须传递原始View.OnClickListener对象或实现它并传递this以使其工作。
编辑:
当你传递这个时,你告诉当前类自己处理点击事件,并且必须覆盖 onClick() 来这样做。当你传递对象时,你让原始类通过创建一个匿名类并实现 onClick() 来处理 onClick。但是当你通过这个时,你当前的类将获得监听输入事件的权限。它变成 OnClicklistener 的类型并获得监听 onClick() 的权限
![?](http://img1.sycdn.imooc.com/5458472300015f4702200220-100-100.jpg)
TA贡献1836条经验 获得超13个赞
要在您的代码中实现 View.setOnclickListener,您需要首先实现公共静态接口 View.OnClickListener。
像这样
public class MyActivity extends Activity implements View.OnClickListener {
}
上面的接口包含 public void 抽象方法“onClick(View v)”,您可以重写该方法以放置逻辑。单击视图时会调用此方法。
为了简单起见,我创建了代码
// Create an anonymous implementation of OnClickListener
private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above
button.setOnClickListener(mCorkyListener);
...
}
这里 OnclickListener 是一个具有对象 mCorkyListener 的接口,类似地,您可以使用 this 关键字代替 mCorkyListener 'this' 表示当前类的实例。您可以使用“this”关键字访问当前类的属性和函数。
添加回答
举报