java - 无法理解在 View.setOnClickListner(this) 中使用 this 关键字?
问题描述
我知道关键字 this 指的是类的当前实例。但是当我们在我们的类中实现 View.OnClickListener 然后在调用方法 textview.setOnClickListener(this) 时,setOnClickListener(this) 的参数 this(类的实例对象)如何自动调用 onClick() 方法。视图类中是否有任何代码获取对象并在此代码上调用 onClick 方法或发生其他事情?
我想知道幕后发生了什么,android如何从这个关键字到达onClick()方法?这就是我想问的?
解决方案
让我们有一个接口 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() 的权限
推荐阅读
- angular - 打字稿 nativescript 轮播不工作
- javascript - 从父页面 MVC 触发 iframe 的按钮
- android - ScrollView 不完全使用约束布局滚动
- angular - 正确显示可观察对象值
- vb.net - 根据 Type 变量将异常转换为 NonGenericException
- python - flask-sqlalchemy 动态构造查询
- java - 在程序运行时将代码从网页的 iframe 复制到 Java 编译器
- powershell - 搜索程序产品代码,然后使用它来卸载程序
- php - 格式数字,如果不是整数,用小数显示,否则显示整数
- sitefinity - 是否可以将 sitefinity 小部件添加到我的自定义小部件?