-2

我只是想知道:

当我编码时

button.setOnclickListener(this)

...即使我在文档中没有找到对“setOnclickListener(context Context)”之类的任何引用,为什么这种方法必须得到“this”。“这”究竟是什么?(我已经实现了 OnClickListener 接口)。

4

3 回答 3

0

嘿,你认为this是错误的。这里这代表 setOnClick 回调的当前类引用。

这里 this 不代表 Context,它是在当前类上实现接口的 java 语法。

OnClickListener是一个interface并且 setOnClick 有参数作为这个接口。因此,如果您使用它,setOnClick那么您必须创建OnClickListener这样的新实例

 view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

或者您通过 this 关键字引用当前类以在当前类中实现该接口。喜欢

view.setOnClickListener(this); 

通过这种方式,您必须在您的类中实现该接口的方法。

  class MyActivity implements OnClickListener{
        @Override
        public void onClick(View v) {

        }
    }

更新 :

thisjava中的关键字是指当前类。当你在context参数中传递这个时,当前类应该是扩展上下文类。为了更好地理解这里this的关键字。

我希望这个解释对你有所帮助。

如果您有任何困惑,请告诉我。

于 2018-04-11T02:54:44.600 回答
0

基本上this是指当前的实例。例如

//this here refers to the current container class
mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //this here refers to OnClickListener   
    }
});

所以如果我使用

MainActivity extends AppCompatActivity implements OnClickListener

mButton.setOnClickListener(this);

我们可以在这里得出结论,我将 MainActivity 作为 clickListener 传递,因为他正在实现OnClickListener使其成为侦听器。希望this能帮助你清除一些东西

于 2018-04-11T02:55:22.467 回答
0

如果 this(上下文)实现了 onClickListener,那么您可以将其称为单击侦听器。关键是它必须有一个函数 onClick 才能在监听器被触发时执行。或者,您可以使用要执行的代码创建一个新的 onClickListener 并将其作为参数传递。

于 2018-04-11T02:38:23.853 回答