【问题标题】:Why does button.setOnClickListener have to set "this" keyword? [duplicate]为什么 button.setOnClickListener 必须设置“this”关键字? [复制]
【发布时间】:2018-09-20 18:39:34
【问题描述】:

我只是想知道:

当我编码时

button.setOnclickListener(this)

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

【问题讨论】:

  • 只有在 Activity 或 Fragment 实现 OnClickListener 接口时才这样做。它与上下文无关。您也可以直接内联,查看文档中的第一个示例:developer.android.com/reference/android/widget/Button.html
  • @DanielNugent:是的,我知道,但是为什么我们需要将上下文传递给该方法,这就是我的意思
  • @duyhoang,它是那个方法的一个参数
  • @duyhoang 你不需要传递上下文。您需要传递一个 OnClickListener。如果 OnClickListener 也恰好是一个上下文,例如实现了 OnClickListener 接口的 Activity,那么可以使用setOnclickListener(this)

标签: android button this-keyword


【解决方案1】:

基本上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能帮助你清理一些东西

【讨论】:

  • 是的,我知道那样,但这不是我要问的,这是一个很深的问题
  • 检查编辑的答案
  • " //这里指的是 OnClickListener" 是我需要的问题
  • 非常感谢
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    这里不代表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) {
    
            }
        }
    

    更新:

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

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

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

    【讨论】:

    • @Khemrai:谢谢,但在某些情况下,“this”可以作为上下文,例如当您创建 toast 时。
    • 嘿伙计,我更新了我的答案以便更好地理解,你应该从上面更新的答案中的引用链接中看到这个关键字在 java 中的用法。
    • 嘿,这个“java中的this关键字引用当前类”有问题。 “this”关键字代表一个类的对象
    • 我从链接中得到:javatpoint.com/this-keyword。 "this 可用于引用当前类实例变量。"
    • 是的,我正在向你解释,伙计。在我的回答中 - java 中的这个关键字指的是当前类实例。
    猜你喜欢
    • 2018-04-08
    • 2014-12-05
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多