setOnClickListener(new OnClickListener(){})

时间:2012-03-06 03:03:34

标签: java android

package android.example;

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Android_eg1 extends Activity {
    Button bt; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt=(Button)findViewById(R.id.click);
        bt.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
            // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show();
            }

        });
      } //onCreate()

}//class

我是java的新手,我知道核心java的基础知识。 这是我尝试通过按钮类了解事件处理的示例程序。 我无法理解这一部分:

"bt.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
        // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "You made a mess", Toast.LENGTH_LONG).show();
        }

    });"

在setOnClickListener(参数)中,为什么它们会给出一个函数定义?(public void onClick(View v)})

这可以接受吗?

5 个答案:

答案 0 :(得分:6)

在java中,这是一个实现接口的Generated Class。您可以在函数参数内动态生成类,也可以创建外部类并传递此类的实例,或者通过您的activty实现侦听器所需的接口,并将您的活动作为侦听器传递。

答案 1 :(得分:3)

setOnClickListenerOnClickListener个对象作为参数。基本上它是在参数中创建一个匿名子类OnClickListener

当你可以使用匿名子类创建一个新线程时,它在java中是相同的,例如:

Thread t = new Thread(new Runnable()
    {     
        public void run(){...}
    });

答案 2 :(得分:3)

按钮单击是一个事件句柄。如果您实现OnClickListner而不是在示例代码中使用,则可以清楚地了解其中的差异。实现OnClickListner时,IDE会显示使用与OnClickListner接口相关的未实现方法的选项。在那里你可以看到public void onClick方法。如果我总结一下情景;

  • 你有一个按钮
  • 你应该有一个监听按钮事件的界面 - OnClickListner
  • 设置按钮事件以收听用户事件 - button.setOnClickListner(this)
  • 事件进入onClick方法
  • 后,您想要做什么?

full example code可能会让您对此有清楚的了解。

答案 3 :(得分:2)

OnclickListener是一个接口(Listener),setOnClickListener()是一个需要onClickListener类型的对象的方法。我们可以匿名创建课程。即,通过调用实现OnClickListener的无名类(匿名类声明)来完成,因此它必须实现void onClick方法。因此,我们将拥有类型接口的对象,这用于速记编程。有关匿名课程的进一步许可,请访问http://www.techartifact.com/blogs/2009/08/anonymous-classes-in-java.html

答案 4 :(得分:0)

setOnClickListener函数,参数类型为OnClickListener()

OnClickListener()是一个接口:(类似于c ++抽象基类)

代码:

    bt.setOnClickListener(new OnClickListener()

    /* this is the definition of anonymous class which implements OnClickListener() */    
  /*  equivalent to : 
class OnClickListener_implementation implements OnClickListener */  
    {
            public void onClick(View v)
                         {
                            //your code here
                           }

    );

这意味着:通过声明指定的onClick来构造实现OnClickListener接口的类的对象