为什么button.setOnClickListener必须设置“this”关键字?

时间:2018-04-11 02:30:45

标签: android button this-keyword

我只是想知道:

当我编码

button.setOnclickListener(this)

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

嘿,你错了this。这里代表了setOnClick回调的当前类referenece。

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

OnClickListenerinterface,setOnClick有参数作为此接口。因此,如果您使用此setOnClick,那么您必须像这样创建OnClickListener的新实例

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

            }
        });

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

view.setOnClickListener(this); 

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

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

        }
    }

更新:

java中的

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

我希望这个解释可以帮到你。

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

答案 2 :(得分: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可以帮助你清除某些内容