不同的OnClickListener实现方式

有什么区别:

public class MainActivity extends Activity { public void onCreate (Bundle savedInstanceState) { button1 = (Button) findViewById(R.id.btn1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // Click code } )}; } } 

和:

 public class MainActivity extends Activity implements OnClickListener { public void onCreate (Bundle savedInstanceState) { button1 = (Button) findViewById(R.id.btn1); button1.setOnClickListener(this); } public void onClick(View arg0) { switch(arg0.getId()) { case R.id.button1: // Click code break; } } } 

它们具有完全相同的function和结果。

第一种方法使用实现接口方法的匿名内部类。 通过使用此方法,您只接收特定视图的事件。

在第二种方法中,整个Activity类实现了OnClickListener接口。 您可以将每个View的OnClickListener设置this ,并在一个方法中接收所有单击事件,然后您可以在其中过滤它们并对其进行操作。

第一种方法转换为:

 Button.OnClickListener anonymous_listener = new Button.OnClickListener() { ... }; button.setOnClickListener(anonymous_listener); 

也就是说,它在您使用它时动态创建并存储新的OnClickListener实例。

在第二种方法中,您的整个类使用一个OnClickListener实例,该实例将传递给您想要监听点击的所有视图。