首页 > 解决方案 > 无法理解在 View.setOnClickListner(this) 中使用 this 关键字?

问题描述

我知道关键字 this 指的是类的当前实例。但是当我们在我们的类中实现 View.OnClickListener 然后在调用方法 textview.setOnClickListener(this) 时,setOnClickListener(this) 的参数 this(类的实例对象)如何自动调用 onClick() 方法。视图类中是否有任何代码获取对象并在此代码上调用 onClick 方法或发生其他事情?

我想知道幕后发生了什么,android如何从这个关键字到达onClick()方法?这就是我想问的?

标签: javaandroidinterfacethisanonymous-class

解决方案


让我们有一个接口 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() 的权限


推荐阅读