View.OnClickListener用法作为Android中的参数

时间:2013-09-27 04:08:08

标签: java android

接口名称不以“()”结尾。

从Android文档中,View.OnClickListener被定义为接口。

http://developer.android.com/reference/android/view/View.OnClickListener.html

话虽如此,当我们将“View.OnClickListener”作为参数传递给侦听器时,为什么我们必须以“()”结束它,如下所示。

.setOnClickListener(new View.OnClickListener() {

5 个答案:

答案 0 :(得分:4)

它是Anonymous inner class的语法,允许您同时声明和实例化类。

.setOnClickListener(new View.OnClickListener() {

//all methods in the interface  implemented here

});

setOnClickListener获取由OnClickListener实现的类型对象,而不是使用该接口创建对象,直接在那里实现方法。

答案 1 :(得分:1)

它是一个匿名的内部类

说你有一个按钮

 button.setOnClickListener(new View.OnClickListener() {
  @override
   public void onClick(View v)
   {

   } 

 });

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

你也可以这样做

  button.setOnClickListener(myclicklistener);

  OnClickListener myclickListener = new OnClickListener() // now you know why you ()
  {
      @Override
      public void onClick(View v)
      {

     } 
  };   

引用java文档

匿名类表达式包含以下内容:

  • 新运营商

  • 要实现的接口的名称或要扩展的类。

  • 包含构造函数参数的括号,就像一个 普通类实例创建表达式。注意:实施时 一个接口,没有构造函数,所以你使用一对空的
    括号,如本例所示。

  • 一个正文,它是一个类声明体。更具体地说,在 body,方法声明是允许的,但声明不允许。

答案 2 :(得分:1)

单击侦听器是一个界面。

语法

variable.setOnClicklistener(new View.OnClickListener()
{})

这是我们使用onClicklistener的方式。

答案 3 :(得分:1)

因为我们在这里开始匿名课程。因此,接口成为一个作为参数传递的对象。

你可以这样做:

View.OnClickListener listener = new View.OnClickListener() {

    @Override
    public void onClick() {
    }
};
someView.setOnClickListener(listener);

答案 4 :(得分:1)

因为您正在创建实现该特定接口的Object。它是对匿名内部类的构造函数调用,您可以通过后面的块中的方法来定义它。

something.setOnClickListener(new View.OnClickListener()
{
   @Override
   public void onClick(View invoker)
   {
       // this is a method specified by the interface. The new Object will have this method implementation
   }
});