代码之家  ›  专栏  ›  技术社区  ›  Novice

无法理解此关键字在视图中的用法。setOnClickListner(这个)?

  •  -3
  • Novice  · 技术社区  · 7 年前

    我知道关键字this指的是类的当前实例。但当我们实现视图时。在我们的类中单击Listener,然后调用方法textview。setOnClickListener(this),setOnClickListener(this)的参数this(类的实例对象)如何自动调用onClick()方法。view类中是否有任何代码在这段代码上使用object并调用onClick方法,或者正在进行其他操作?

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

    3 回复  |  直到 7 年前
        1
  •  0
  •   user8959091 user8959091    7 年前

    OnClickListener 是类中的一个接口 View .
    如果您的活动通过设置来实现此接口:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener
    

    然后,您可以为类似视图的按钮设置侦听器:

    myButton.setOnClickListener(this);
    

    并重写onClick方法,如下所示:

    @Override
    public void onClick(View v) {
    // your code here
    }
    

    所以一个简单的解释是: this 意味着您的视图将使用活动的 onClick 方法

        2
  •  0
  •   Parikshit Sharma    7 年前

    以实现该视图。setOnclickListener在代码中,首先需要实现公共静态接口视图。我的听众。

    这样地

        public class MyActivity extends Activity implements View.OnClickListener {
    }
    

    上面的接口包含公共的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 同样,你也可以用这个关键字来代替mCorkyListener 这表示当前类的实例。您可以使用此关键字访问当前类的属性和函数。

        3
  •  0
  •   vikas kumar    7 年前

    我们来做一个接口电路图吧

    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金额,类似的情况是,如果你想收听输入事件,你必须通过原始 看法OnClickListener 反对还是 使生效 就这样过去了 this 让它发挥作用。

    编辑:

    当您传递这个消息时,您会告诉当前类自己处理click事件,并且必须重写onClick()才能这样做。当传递对象时,通过创建一个匿名类并实现onClick(),让原始类处理onClick。但是当你通过这个测试时,你现在的班级就有权听输入事件。它成为OnClicklistener类型,并获得监听onClick()的权限