2013-02-11 34 views
2

之间有什么区别:不同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; 
     } 
    } 
} 

他们有相同的功能和效果两者。

+0

检查此.. http://stackoverflow.com/questions/7453299/difference-between-onclick-event-and-onclicklistener – MuraliGanesan 2013-02-11 12:24:46

+1

我觉得没有区别。但第二种方法对于太多按钮更有用。 – ChuKoNu 2013-02-11 12:25:22

回答

4

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

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

第一种方法转换为:

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

这就是说,它动态地创建,当你使用它存储新OnClickListener实例。

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