不同的OnClickListener实现方式

时间:2013-02-11 12:18:04

标签: java android

有什么区别:

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;
        }
    }
}

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

1 个答案:

答案 0 :(得分:4)

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

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

第一种方法转换为:

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

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

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