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)})
这可以接受吗?
答案 0 :(得分:6)
在java中,这是一个实现接口的Generated Class。您可以在函数参数内动态生成类,也可以创建外部类并传递此类的实例,或者通过您的activty实现侦听器所需的接口,并将您的活动作为侦听器传递。
答案 1 :(得分:3)
setOnClickListener
将OnClickListener
个对象作为参数。基本上它是在参数中创建一个匿名子类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接口的类的对象