为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2021-06-08 17:59:06
我知道关键字 this 指的是当前的类实例。但是当我们在我们的类中实现 View.OnClickListener 然后调用方法 textview.setOnClickListener(this) 时,setOnClickListener(this) 的参数 this(类的实例对象)如何自动调用 onClick() 方法。视图类中是否有任何代码可以获取对象并在此代码上调用 onClick 方法或正在执行其他操作?我想知道幕后发生了什么,android 如何从这个关键字到达 onClick() 方法?这就是我想问的?
查看完整描述

3 回答

?
烙印99

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() 的权限


查看完整回答
反对 回复 2021-06-17
?
开心每一天1111

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”关键字访问当前类的属性和函数。


查看完整回答
反对 回复 2021-06-17
  • 3 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信