【问题标题】:Android setOnClickListener method - How does it work?Android setOnClickListener 方法 - 它是如何工作的?
【发布时间】:2014-11-06 08:43:36
【问题描述】:

我无法理解这段代码。我知道findViewById 会得到按钮小部件,然后它会投射它。然后,它将使用按钮调用setOnClickListener 方法。但是,我不知道传递给setOnClickListener 的参数是什么,而且我以前从未见过这样的代码。它如何创建一个新对象但能够在另一个方法的参数中创建自己的方法?如果有人能解释一下,那就太好了。还有,setOnClickListener方法接收的是什么类型的对象?

btn = (Button)findViewById(R.id.firstButton);
btn.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        tv.setText(months[rand.nextInt(12)]);
        tv.setTextColor(Color.rgb(rand.nextInt(255)+1, rand.nextInt(255)+1, rand.nextInt(255)+1));
    }
});

【问题讨论】:

  • 放入 toat 并检查
  • 它提供了一个匿名类的实例,该类符合接口 View.OnClickListener。

标签: android button onclicklistener


【解决方案1】:

它的工作原理与匿名内部类相同,我们可以在不实际定义类的情况下实例化接口:

参考:https://www.geeksforgeeks.org/anonymous-inner-class-java/

【讨论】:

  • 这不是对所提问题的回答。
【解决方案2】:

它是匿名类对象创建的一种实现,可以轻松编写更少的代码并节省时间

【讨论】:

    【解决方案3】:

    这是为连续的多个按钮实现 Onclicklistener 的最佳方式 实现 View.onclicklistener。

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    

    这是 MainActivity 中的一个按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        bt_submit = (Button) findViewById(R.id.submit);
    
        bt_submit.setOnClickListener(this);
    }
    

    这是一个覆盖方法

        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.submit:
                    //action
    
                    break;
    
                case R.id.secondbutton:
                    //action
                    break;
            }
        }
    

    【讨论】:

      【解决方案4】:

      那手动says关于setOnClickListener的方法是:

      public void setOnClickListener (View.OnClickListener l)
      

      在 API 级别 1 中添加注册一个回调,以便在此视图时调用 被点击。如果此视图不可点击,则变为可点击。

      参数

      l View.OnClickListener:将运行的回调

      通常你必须像这样使用它

      public class ExampleActivity extends Activity implements OnClickListener {
          protected void onCreate(Bundle savedValues) {
              ...
              Button button = (Button)findViewById(R.id.corky);
              button.setOnClickListener(this);
          }
      
          // Implement the OnClickListener callback
          public void onClick(View v) {
            // do something when the button is clicked
          }
          ...
      }
      

      也可以看看这节课Building a Simple Calculator using Android Studio

      【讨论】:

        【解决方案5】:

        它是这样工作的。 View.OnClickListenere 已定义 -

        public interface OnClickListener {
            void onClick(View v);
        }
        

        据我们所知,您无法实例化对象OnClickListener,因为它没有实现方法。因此,您可以通过两种方式 - 您可以实现此接口,该接口将覆盖 onClick 方法,如下所示:

        public class MyListener implements View.OnClickListener {
            @Override
            public void onClick (View v) {
                 // your code here;
            }
        }
        

        但是每次设置点击侦听器时都非常繁琐。因此,为了避免这种情况,您可以现场提供该方法的实现,就像您给出的示例一样。

        setOnClickListenerView.OnClickListener 为参数。

        【讨论】:

        • 很棒的解释!!现在很有意义,学到了新东西!!我从来不知道你可以通过在现场实现它的方法来实例化一个接口的对象。很酷。
        • 如果您想了解更多有关观察者设计模式的信息:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        • 2015-07-27
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多