无法理解在 View.setOnClickListner(this) 中使用 this 关键字?

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

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


qq_花开花谢_0
浏览 352回答 3
3回答

烙印99

让我们有一个界面 ElectricityBillpublic 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() 的权限

开心每一天1111

要在您的代码中实现 View.setOnclickListener,您需要首先实现公共静态接口 View.OnClickListener。像这样    public class MyActivity extends Activity implements View.OnClickListener {}上面的接口包含 public void 抽象方法“onClick(View v)”,您可以重写该方法以放置逻辑。单击视图时会调用此方法。为了简单起见,我创建了代码// Create an anonymous implementation of OnClickListenerprivate 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”关键字访问当前类的属性和函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java