Android 为什么button.setOnClickListener必须设置";这";关键词?

Android 为什么button.setOnClickListener必须设置";这";关键词?,android,button,this-keyword,Android,Button,This Keyword,我只是想知道: 当我编码时 button.setOnclickListener(this) …为什么这个方法必须得到“this”,即使我在文档中找不到任何类似“setOnclickListener(context-context)”的引用。“这”是什么?(我已经实现了OnClickListener接口)。如果这个(上下文)实现了OnClickListener,那么您可以将它称为click listener。关键是它必须有一个函数onClick,以便在监听器被触发时执行。或者,您可以使用希望执行

我只是想知道:

当我编码时

button.setOnclickListener(this)

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

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

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

在这里,这并不表示上下文,而是在当前类上实现接口的java语法

OnClickListener
是一个
接口
,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中指的是当前类。当您在
context
参数中传递该参数时,当前类必须扩展context类。 为了更好地理解
这个
关键字

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


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

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

//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);

我们可以在这里得出结论,我作为clickListener传递我的主要活动,因为他正在实现
OnClickListener
,这使它成为一个监听器。希望
可以帮助您清除某些内容

只有在活动或片段实现OnClickListener接口时,您才可以这样做。它与上下文无关。你也可以内联操作,看看文档中的第一个例子:@DanielNugent:是的,我知道,但是为什么我们需要将上下文传递到该方法中,这就是我想要的mean@duyhoang,这是一个参数method@duyhoang您不需要传递上下文。您需要传递一个onclick侦听器。如果OnClickListener恰好也是一个上下文,例如一个实现OnClickListener接口的活动,那么您可以使用
setOnclickListener(this)
。是的,我知道这样做,但这不是我要问的,这是一个深入的问题检查编辑的答案”//这里指的是OnClickListener“这是我要问的问题谢谢man@Khemrai:谢谢,但在某些情况下,“this”可以作为上下文,例如,当你创建一个toast时。嘿,伙计,为了更好地理解,我更新了我的答案,你应该从上面更新的答案中的引用链接中看到这个关键字在java中的用法。嘿,这有点问题“java中的这个关键字指的是当前类”。“这个”关键字代表一个classi-get的对象,链接:。“这可以用来指的是当前类实例变量。”是的,这就是我刚才向你解释的。在我的回答中-java中的这个关键字指的是当前类实例。