【问题标题】:When to set onClickListener with View and when with Button?何时使用 View 设置 onClickListener,何时使用 Button?
【发布时间】:2016-01-23 18:14:42
【问题描述】:

我刚刚从 thenewboston.com 教程开始学习 Android 应用程序开发。

我对设置 onClickListener 事件处理程序感到困惑。在为主要活动中的按钮设置它时,他们使用了 Button 类。

    redButton.setOnClickListener(
      new Button.onClickListener(){
              public void onClick(View v){
                 // Do Something 
             }
        }
    );

但是在为片段设置它时,他们使用了视图类。

    redButton.setOnClickListener(
          new View.onClickListener(){
                  public void onClick(View v){
                     // Do Something 
                 }
            }
        );

这两者有什么区别?以及何时使用它们? 请帮忙!!

【问题讨论】:

  • activity 我们也可以使用 View
  • Button 类派生自 View 类。因此您可以从任何一种类型中设置点击侦听器,编译器不会抱怨您。最好始终使用特定的侦听器类型。在这种情况下使用“按钮.onClickListener"。
  • 但是当我使用 Button 类时,应用程序崩溃了。

标签: android class button view


【解决方案1】:

在 Button 中,您也可以像在片段中一样使用 View。 实际上两者的工作原理相同。这只是您想要获得比其他更好的解决方案的方式。

更多详情可以参考:

setOnclickListener vs OnClickListener vs View.OnClickListener

Difference between specifying the view.onclicklistener and just having onclicklistener

【讨论】:

    【解决方案2】:

    Button.onClickListener() 只能用于Button。但是View.onClickListener() 可以用于任何视图。那么正确的做法是什么?

    嗯,您当前所做的称为“设置匿名侦听器”。那很糟。更多信息在这里:https://softwareengineering.stackexchange.com/a/110113

    最好的方法是让您的ActivityFragment 实现View.onClickListener() 并覆盖onClick() 方法。

    【讨论】:

      【解决方案3】:

      ButtonView 的派生类,因此ButtononClickListeneronClickListener 覆盖为View

      而且两种实现方式没有区别

      documentation for button 示例中使用view.onClickListener

       final Button button = (Button) findViewById(R.id.button_id);
       button.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               // Perform action on click
           }
       });
      

      所以这似乎是推荐的方式。

      【讨论】:

      • 谢谢!!这是一个非常简单的解释。我已经阅读了您在其他一些帖子上的答案以及与 android 相关的内容。当我刚开始为 android 开发时,我有一些问题。我想知道您是否可以将您的电子邮件 ID 给我,以便我与您联系?
      • 我们可以在 SO 上聊天。
      • 我不知道它是如何工作的。如果你能开始会很高兴。谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 2019-03-15
      相关资源
      最近更新 更多